概述
生產者生產數據至 RabbitMQ 隊列,消費者消費 RabbitMQ 隊列里的數據。
詳細
一、准備工作
1、安裝 RabbitMQ 服務和 RabbitMQ Management。
2、在 RabbitMQ 管理界面創建用戶 test 密碼 test,創建名為 test_vhost 的 Virtual Hosts ,將 test_vhost 分配 給 test用戶
二、程序實現
1、程序結構

2、實現思路
配置發送的 Exchange 和 Queue
<rabbit:queue id="queue.ljaer.test" name="queue.ljaer.test"
auto-declare="true" auto-delete="false" exclusive="false" durable="true"
declared-by="rabbitAdmin" />
<!-- Exchange Type 為 topic 配置方法 -->
<rabbit:topic-exchange id="exchange.topic.producer"
auto-declare="true" name="exchange.topic.producer" auto-delete="false"
durable="true" declared-by="rabbitAdmin">
<rabbit:bindings>
<rabbit:binding pattern="queue.ljaer.test" queue="queue.ljaer.test" />
</rabbit:bindings>
</rabbit:topic-exchange>
連接 RabbitMQ 發送數據至隊列
public class RabbitmqProducerTest {
private static ApplicationContext context;
public static void main(String[] args) {
context = new ClassPathXmlApplicationContext("send-rabbitMq.xml");
AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
JSONObject json = new JSONObject();
json.put("name", "張三");
json.put("age", "15");
amqpTemplate.convertAndSend("queue.ljaer.test", json);
//amqpTemplate.convertAndSend("exchange.topic.producer","queue.ljaer.test", json);
System.out.println("success");
}
}
配置監聽
<!--定義queue 接收數據 -->
<rabbit:queue id="queue.ljaer.test" name="queue.ljaer.test"
auto-declare="true" auto-delete="false" exclusive="false" durable="true"
declared-by="rabbitAdmin" />
<!-- 消息監聽器 -->
<bean id="rabbitmqConsumerTest" class="com.test.mq.RabbitmqConsumerTest" />
<!-- 隊列監聽 -->
<rabbit:listener-container
connection-factory="connectionFactory" acknowledge="auto">
<rabbit:listener queues="queue.ljaer.test" ref="rabbitmqConsumerTest" />
</rabbit:listener-container>
監聽消費 RabbitMQ 隊列的數據
public class RabbitmqConsumerTest implements MessageListener {
public void onMessage(Message message) {
System.out.println("receive message:{}"+message.getBody());
try {
String s = new String(message.getBody(), "UTF-8");
System.out.println("------>MQ接收到的數據:"+s);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3、配置文件說明
#mq mq.host=192.168.99.100 mq.username=test mq.password=test mq.port=5672 mq.vhost=/test_vhost
三、運行效果
1、導入項目至 Eclipse,修改 rabbit.properties 里面的連接信息,連接至你本地的 RabbitMQ 服務
2、執行 RabbitmqProducerTest 的 main 方法,發送消息至 RabbitMQ 隊列


3、執行 RabbitmqConsumerMain 的 main 方法,進行隊列監聽,消費 RabbitMQ 隊列里的數據

消費完之后,在 RabbitMQ Managemenet 里面查看也會看到隊列數據減少
四、其他補充
1、注意用 guest 用戶創建 test 用戶之后,需要使用 test 用戶登錄才能看到該用戶下的隊列數據
2、如果選擇其他類型的 exchange ,注意配文件與 mq 上保持一致
