日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

【消息中间件】Spring整合RabbitMQ

發布時間:2025/5/22 javascript 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【消息中间件】Spring整合RabbitMQ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

搭建生產者工程

添加依賴

修改pom.xml文件內容為如下:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cs.wanyuan</groupId><artifactId>spring-rabbitmq-producer</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.7.RELEASE</version></dependency><dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId><version>2.1.8.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.1.7.RELEASE</version></dependency></dependencies></project>
配置整合

創建resources\properties\rabbitmq.properties連接參數等配置文件;

rabbitmq.host=192.168.12.135rabbitmq.port=5672rabbitmq.username=wanyuanrabbitmq.password=wanyuanrabbitmq.virtual-host=/wanyuan

創建 resources\spring\spring-rabbitmq.xml 整合配置文件;

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:rabbit="http://www.springframework.org/schema/rabbit"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/rabbithttp://www.springframework.org/schema/rabbit/spring-rabbit.xsd"><!--加載配置文件--><context:property-placeholder location="classpath:properties/rabbitmq.properties"/><!-- 定義rabbitmq connectionFactory --><rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"port="${rabbitmq.port}"username="${rabbitmq.username}"password="${rabbitmq.password}"virtual-host="${rabbitmq.virtual-host}"/><!--定義管理交換機、隊列--><rabbit:admin connection-factory="connectionFactory"/><!--定義持久化隊列,不存在則自動創建;不綁定到交換機則綁定到默認交換機默認交換機類型為direct,名字為:"",路由鍵為隊列的名稱--><rabbit:queue id="spring_queue" name="spring_queue" auto-declare="true"/><!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~廣播;所有隊列都能收到消息~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --><!--定義廣播交換機中的持久化隊列,不存在則自動創建--><rabbit:queue id="spring_fanout_queue_1" name="spring_fanout_queue_1" auto-declare="true"/><!--定義廣播交換機中的持久化隊列,不存在則自動創建--><rabbit:queue id="spring_fanout_queue_2" name="spring_fanout_queue_2" auto-declare="true"/><!--定義廣播類型交換機;并綁定上述兩個隊列--><rabbit:fanout-exchange id="spring_fanout_exchange" name="spring_fanout_exchange" auto-declare="true"><rabbit:bindings><rabbit:binding queue="spring_fanout_queue_1"/><rabbit:binding queue="spring_fanout_queue_2"/></rabbit:bindings></rabbit:fanout-exchange><!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~通配符;*匹配一個單詞,#匹配多個單詞 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --><!--定義廣播交換機中的持久化隊列,不存在則自動創建--><rabbit:queue id="spring_topic_queue_star" name="spring_topic_queue_star" auto-declare="true"/><!--定義廣播交換機中的持久化隊列,不存在則自動創建--><rabbit:queue id="spring_topic_queue_well" name="spring_topic_queue_well" auto-declare="true"/><!--定義廣播交換機中的持久化隊列,不存在則自動創建--><rabbit:queue id="spring_topic_queue_well2" name="spring_topic_queue_well2" auto-declare="true"/><rabbit:topic-exchange id="spring_topic_exchange" name="spring_topic_exchange" auto-declare="true"><rabbit:bindings><rabbit:binding pattern="wanyuan.*" queue="spring_topic_queue_star"/><rabbit:binding pattern="wanyuan.#" queue="spring_topic_queue_well"/><rabbit:binding pattern="wanchen.#" queue="spring_topic_queue_well2"/></rabbit:bindings></rabbit:topic-exchange><!--定義rabbitTemplate對象操作可以在代碼中方便發送消息--><rabbit:template id="rabbitTemplate" connection-factory="connectionFactory"/></beans>
發送消息

創建測試文件 ProducerTest.java

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = "classpath:spring/spring-rabbitmq.xml")public class ProducerTest {@Autowiredprivate RabbitTemplate rabbitTemplate;/*** 只發隊列消息* 默認交換機類型為 direct* 交換機的名稱為空,路由鍵為隊列的名稱*/@Testpublic void queueTest(){//路由鍵與隊列同名rabbitTemplate.convertAndSend("spring_queue", "只發隊列spring_queue的消息。");}/*** 發送廣播* 交換機類型為 fanout* 綁定到該交換機的所有隊列都能夠收到消息*/@Testpublic void fanoutTest(){/*** 參數1:交換機名稱* 參數2:路由鍵名(廣播設置為空)* 參數3:發送的消息內容*/rabbitTemplate.convertAndSend("spring_fanout_exchange", "", "發送到spring_fanout_exchange交換機的廣播消息");}/*** 通配符* 交換機類型為 topic* 匹配路由鍵的通配符,*表示一個單詞,#表示多個單詞* 綁定到該交換機的匹配隊列能夠收到對應消息*/@Testpublic void topicTest(){/*** 參數1:交換機名稱* 參數2:路由鍵名* 參數3:發送的消息內容*/rabbitTemplate.convertAndSend("spring_topic_exchange", "wanyuan.bj", "發送到spring_topic_exchange交換機wanyuan.bj的消息");rabbitTemplate.convertAndSend("spring_topic_exchange", "wanyuan.bj.1", "發送到spring_topic_exchange交換機wanyuan.bj.1的消息");rabbitTemplate.convertAndSend("spring_topic_exchange", "wanyuan.bj.2", "發送到spring_topic_exchange交換機wanyuan.bj.2的消息");rabbitTemplate.convertAndSend("spring_topic_exchange", "wanchen.cn", "發送到spring_topic_exchange交換機wanchen.cn的消息");}}

搭建消費者工程

添加依賴

修改pom.xml文件內容為如下:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cs.wanyuan</groupId><artifactId>spring-rabbitmq-consumer</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.7.RELEASE</version></dependency><dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId><version>2.1.8.RELEASE</version></dependency></dependencies></project>
配置整合

創建resources\properties\rabbitmq.properties連接參數等配置文件;

rabbitmq.host=192.168.12.135rabbitmq.port=5672rabbitmq.username=wanyuanrabbitmq.password=wanyuanrabbitmq.virtual-host=/wanyuan

創建 resources\spring\spring-rabbitmq.xml 整合配置文件;

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:rabbit="http://www.springframework.org/schema/rabbit"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/rabbithttp://www.springframework.org/schema/rabbit/spring-rabbit.xsd"><!--加載配置文件--><context:property-placeholder location="classpath:properties/rabbitmq.properties"/><!-- 定義rabbitmq connectionFactory --><rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"port="${rabbitmq.port}"username="${rabbitmq.username}"password="${rabbitmq.password}"virtual-host="${rabbitmq.virtual-host}"/><bean id="springQueueListener" class="com.itheima.rabbitmq.listener.SpringQueueListener"/><bean id="fanoutListener1" class="cs.wanyuan.rabbitmq.listener.FanoutListener1"/><bean id="fanoutListener2" class="cs.wanyuan.rabbitmq.listener.FanoutListener2"/><bean id="topicListenerStar" class="cs.wanyuan.rabbitmq.listener.TopicListenerStar"/><bean id="topicListenerWell" class="cs.wanyuan.rabbitmq.listener.TopicListenerWell"/><bean id="topicListenerWell2" class="cs.wanyuan.rabbitmq.listener.TopicListenerWell2"/><rabbit:listener-container connection-factory="connectionFactory" auto-declare="true"><rabbit:listener ref="springQueueListener" queue-names="spring_queue"/><rabbit:listener ref="fanoutListener1" queue-names="spring_fanout_queue_1"/><rabbit:listener ref="fanoutListener2" queue-names="spring_fanout_queue_2"/><rabbit:listener ref="topicListenerStar" queue-names="spring_topic_queue_star"/><rabbit:listener ref="topicListenerWell" queue-names="spring_topic_queue_well"/><rabbit:listener ref="topicListenerWell2" queue-names="spring_topic_queue_well2"/></rabbit:listener-container></beans>
消息監聽器

1)隊列監聽器

創建 SpringQueueListener.java

public class SpringQueueListener implements MessageListener {public void onMessage(Message message) {try {String msg = new String(message.getBody(), "utf-8");System.out.printf("接收路由名稱為:%s,路由鍵為:%s,隊列名為:%s的消息:%s \n",message.getMessageProperties().getReceivedExchange(),message.getMessageProperties().getReceivedRoutingKey(),message.getMessageProperties().getConsumerQueue(),msg);} catch (Exception e) {e.printStackTrace();}}}

2)廣播監聽器1

創建 FanoutListener1.java

public class FanoutListener1 implements MessageListener {public void onMessage(Message message) {try {String msg = new String(message.getBody(), "utf-8");System.out.printf("廣播監聽器1:接收路由名稱為:%s,路由鍵為:%s,隊列名為:%s的消息:%s \n",message.getMessageProperties().getReceivedExchange(),message.getMessageProperties().getReceivedRoutingKey(),message.getMessageProperties().getConsumerQueue(),msg);} catch (Exception e) {e.printStackTrace();}}}

3)廣播監聽器2

創建 FanoutListener2.java

public class FanoutListener2 implements MessageListener {public void onMessage(Message message) {try {String msg = new String(message.getBody(), "utf-8");System.out.printf("廣播監聽器2:接收路由名稱為:%s,路由鍵為:%s,隊列名為:%s的消息:%s \n",message.getMessageProperties().getReceivedExchange(),message.getMessageProperties().getReceivedRoutingKey(),message.getMessageProperties().getConsumerQueue(),msg);} catch (Exception e) {e.printStackTrace();}}}

4)星號通配符監聽器

創建 TopicListenerStar.java

public class TopicListenerStar implements MessageListener {public void onMessage(Message message) {try {String msg = new String(message.getBody(), "utf-8");System.out.printf("通配符*監聽器:接收路由名稱為:%s,路由鍵為:%s,隊列名為:%s的消息:%s \n",message.getMessageProperties().getReceivedExchange(),message.getMessageProperties().getReceivedRoutingKey(),message.getMessageProperties().getConsumerQueue(),msg);} catch (Exception e) {e.printStackTrace();}}}

5)井號通配符監聽器

創建 TopicListenerWell.java

public class TopicListenerWell implements MessageListener {public void onMessage(Message message) {try {String msg = new String(message.getBody(), "utf-8");System.out.printf("通配符#監聽器:接收路由名稱為:%s,路由鍵為:%s,隊列名為:%s的消息:%s \n",message.getMessageProperties().getReceivedExchange(),message.getMessageProperties().getReceivedRoutingKey(),message.getMessageProperties().getConsumerQueue(),msg);} catch (Exception e) {e.printStackTrace();}}}

6)井號通配符監聽器2

創建 TopicListenerWell2.java

public class TopicListenerWell2 implements MessageListener {public void onMessage(Message message) {try {String msg = new String(message.getBody(), "utf-8");System.out.printf("通配符#監聽器2:接收路由名稱為:%s,路由鍵為:%s,隊列名為:%s的消息:%s \n",message.getMessageProperties().getReceivedExchange(),message.getMessageProperties().getReceivedRoutingKey(),message.getMessageProperties().getConsumerQueue(),msg);} catch (Exception e) {e.printStackTrace();}}}

總結

以上是生活随笔為你收集整理的【消息中间件】Spring整合RabbitMQ的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。