国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

三分鐘實現 Spring Boot 集成 RabbitMQ,實現消息隊列服務

開發 前端
Spring Boot提供了spring-bootstarter-amqp組件對消息隊列進行支持,使用非常簡單,僅需要非常少的配置即可實現完整的消息隊列服務。

 [[424312]]

消息中間件在互聯網公司使用的越來越多,主要用于在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。消息隊列實現系統之間的雙向解耦,生產者往消息隊列中發送消息,消費者從隊列中拿取消息并處理,生產者不用關心是誰來消費,消費者不用關心誰在生產消息,從而達到系統解耦的目的,也大大提高了系統的高可用性和高并發能力。

接下來介紹Spring Boot對RabbitMQ的支持。如何在SpringBoot項目中使用RabbitMQ?

Spring Boot提供了spring-bootstarter-amqp組件對消息隊列進行支持,使用非常簡單,僅需要非常少的配置即可實現完整的消息隊列服務。

一、Spring Boot集成RabbitMQ

Spring Boot提供了spring-boot-starter-amqp組件,只需要簡單的配置即可與Spring Boot無縫集成。下面通過示例演示集成RabbitMQ實現消息的接收和發送。

第一步,配置pom包。

創建Spring Boot項目并在pom.xml文件中添加spring-bootstarter-amqp等相關組件依賴:

  1. <dependency> 
  2.  
  3. <groupId>org.springframework.boot</groupId> 
  4.  
  5. <artifactId>spring-boot-starter-amqp</artifactId> 
  6.  
  7. </dependency> 

在上面的示例中,引入Spring Boot自帶的amqp組件spring-bootstarter-amqp。

第二步,修改配置文件。

修改application.properties配置文件,配置rabbitmq的host地址、端口以及賬戶信息。

  1. spring.rabbitmq.host=10.2.1.231 
  2.  
  3. spring.rabbitmq.port=5672 
  4.  
  5. spring.rabbitmq.username=zhangweizhong 
  6.  
  7. spring.rabbitmq.password=weizhong1988 
  8.  
  9. spring.rabbitmq.virtualHost=order 

在上面的示例中,主要配置RabbitMQ服務的地址。RabbitMQ配置由spring.rabbitmq.*配置屬性控制。virtual-host配置項指定RabbitMQ服務創建的虛擬主機,不過這個配置項不是必需的。

第三步,創建消費者。

消費者可以消費生產者發送的消息。接下來創建消費者類Consumer,并使用@RabbitListener注解來指定消息的處理方法。示例代碼如下:

  1. @Component 
  2. public class Consumer { 
  3.  
  4.     @RabbitHandler 
  5.     @RabbitListener(queuesToDeclare = @Queue("rabbitmq_queue")) 
  6.     public void process(String message) { 
  7.         System.out.println("消費者消費消息111=====" + message); 
  8.     } 
  9.  

在上面的示例中,Consumer消費者通過@RabbitListener注解創建偵聽器端點,綁定rabbitmq_queue隊列。

(1)@RabbitListener注解提供了@QueueBinding、@Queue、@Exchange等對象,通過這個組合注解配置交換機、綁定路由并且配置監聽功能等。

(2)@RabbitHandler注解為具體接收的方法。

第四步,創建生產者。

生產者用來產生消息并進行發送,需要用到RabbitTemplate類。與之前的RedisTemplate類似,RabbitTemplate是實現發送消息的關鍵類。示例代碼如下:

  1. @Component 
  2. public class Producer { 
  3.  
  4.     @Autowired 
  5.     private RabbitTemplate rabbitTemplate; 
  6.      
  7.     public void produce() { 
  8.         String message = new Date() + "Beijing"
  9.         System.out.println("生產者產生消息=====" + message); 
  10.         rabbitTemplate.convertAndSend("rabbitmq_queue", message); 
  11.     } 

如上面的示例所示,RabbitTemplate提供了 convertAndSend方法發送消息。convertAndSend方法有routingKey和message兩個參數:

(1)routingKey為要發送的路由地址。

(2)message為具體的消息內容。發送者和接收者的queuename必須一致,不然無法接收。

最后,測試驗證。

創建對應的測試類ApplicationTests,驗證消息發送和接收是否成功。

  1. @RunWith(SpringRunner.class
  2. @SpringBootTest 
  3. public class ApplicationTests { 
  4.  
  5.     @Autowired 
  6.     Producer producer; 
  7.  
  8.     @Test 
  9.     public void contextLoads() throws InterruptedException { 
  10.         producer.produce();  
  11.         Thread.sleep(1*1000); 
  12.  
  13.     } 

在上面的示例中,首先注入生產者對象,然后調用produce()方法來發送消息。

最后,單擊Run Test或在方法上右擊,選擇Run 'contextLoads()',運行單元測試程序,查看后臺輸出情況,結果如下圖所示。

通過上面的程序輸出日志可以看到,消費者已經收到了生產者發送的消息并進行了處理。這是常用的簡單使用示例。

二、發送和接收實體對象

Spring Boot支持對象的發送和接收,且不需要額外的配置。下面通過一個例子來演示RabbitMQ發送和接收實體對象。

1. 定義實體類

首先,定義發送與接收的對象實體User類,代碼如下:

  1. public class User implements Serializable { 
  2.  
  3.     public String name; 
  4.  
  5.     public String password; 
  6.  
  7.     // 省略get和set方法 
  8.  

在上面的示例中,定義了普通的User實體對象。需要注意的是,實體類對象必須繼承Serializable序列化接口,否則會報數據無法序列化的錯誤。

2. 定義消費者

修改Consumer類,將參數換成User對象。示例代碼如下:

  1. @Component 
  2. public class Consumer { 
  3.  
  4.     @RabbitHandler 
  5.     @RabbitListener(queuesToDeclare = @Queue("rabbitmq_queue_object")) 
  6.     public void process(User user) { 
  7.         System.out.println("消費者消費消息111user=====name:" + user.getName()+",password:"+user.getPassword()); 
  8.      
  9.     } 

其實,消費者類和消息處理方法和之前的類似,只不過將參數換成了實體對象,監聽rabbitmq_queue_object隊列。

3. 定義生產者

修改Producer類,定義User實體對象,并通過convertAndSend方法發送對象消息。示例代碼如下:

  1. @Component 
  2. public class Producer { 
  3.  
  4.     @Autowired 
  5.     private RabbitTemplate rabbitTemplate; 
  6.      
  7.     public void produce() {  
  8.         User user=new User(); 
  9.         user.setName("weiz"); 
  10.         user.setPassword("123456"); 
  11.         System.out.println("生產者生產消息111=====" + user); 
  12.          
  13.         rabbitTemplate.convertAndSend("rabbitmq_queue_object", user); 
  14.     } 
  15.  

在上面的示例中,還是調用convertAndSend()方法發送實體對象。convertAndSend()方法支持String、Integer、Object等基礎的數據類型。

4. 驗證測試

創建單元測試類,注入生產者對象,然后調用produceObj()方法發送實體對象消息,從而驗證消息能否被成功接收。

  1. @RunWith(SpringRunner.class
  2. @SpringBootTest 
  3. public class ApplicationTests { 
  4.  
  5.     @Autowired 
  6.     Producer producer; 
  7.  
  8.     @Test 
  9.     public void testProduceObj() throws InterruptedException { 
  10.         producer.produceObj(); 
  11.         Thread.sleep(1*1000); 
  12.     } 

最后,單擊Run Test或在方法上右擊,選擇Run 'contextLoads()',運行單元測試程序,查看后臺輸出情況,運行結果如圖12-8所示。

通過上面的示例成功實現了RabbitMQ發送和接收實體對象,使得消息的數據結構更加清晰,也更加貼合面向對象的編程思想。

 

責任編輯:張燕妮 來源: 架構師精進
相關推薦

2024-04-01 09:59:08

消息隊列通信微服務

2024-09-13 08:49:45

2024-03-28 08:07:42

RabbitMQ訂閱模式

2022-02-16 19:42:25

Spring配置開發

2024-06-06 08:50:43

2023-12-23 18:04:40

服務Eureka工具

2023-08-01 09:01:51

Broker? 事務消息selector

2023-08-14 09:16:26

消息存儲磁盤

2023-08-24 09:01:25

消息拉取RocketMQ

2024-12-18 10:24:59

代理技術JDK動態代理

2009-11-09 12:55:43

WCF事務

2024-05-16 11:13:16

Helm工具release

2022-02-21 18:16:38

Go語言枚舉

2020-06-30 10:45:28

Web開發工具

2025-10-27 01:35:00

2013-06-28 14:30:26

棱鏡計劃棱鏡棱鏡監控項目

2024-09-02 00:03:00

tabs組件CSS

2025-03-26 01:35:00

tabs開發組件

2021-04-20 13:59:37

云計算

2024-08-30 08:50:00

點贊
收藏

51CTO技術棧公眾號

人人澡人一摸人人添| 国产精品涩涩涩视频网站| 涩涩视频在线播放| 欧美性猛交xxxx免费看| 国产福利视频在线播放| 亚洲深夜影院| 欧美性xxxx69| 婷婷精品进入| 国产精品网红福利| jvid福利在线一区二区| 欧美夜福利tv在线| av亚洲在线观看| 欧美亚洲另类激情另类| 四虎精品在线观看| 欧美日韩日日骚| 日本电影在线观看网站| 91精品国产福利| 日本动漫理论片在线观看网站| 国产日产欧美一区| 日韩欧美99| 欧美全黄视频| 精品一区二区三区国产| 亚洲视频久久| 欧美精品一区二区视频| 青青草国产精品97视觉盛宴| 国产视频一区在线观看| 成人动漫在线观看视频| 福利一区和二区| 91精品国产综合久久国产大片| 中文字幕在线免费| 欧美成人自拍| 精品无人乱码一区二区三区的优势 | 在线观看不卡视频| 99久久久无码国产精品6| 国产精品久久久久久久久免费丝袜 | 欧美色视频日本版| 日本国产欧美一区二区三区| 成人豆花视频| 国产精品免费视频xxxx| 人妖欧美一区二区| 成年人在线看片| 色综合天天综合色综合av| av毛片在线免费看| 久久久之久亚州精品露出| 少妇精品视频一区二区免费看| 国产精品678| 成人激情综合网站| 国产成人自拍高清视频在线免费播放| 999精品视频一区二区三区| 精品亚洲国产成人av制服丝袜| 免费 成 人 黄 色| 亚洲综合视频在线观看| 精品176极品一区| 蜜桃视频在线观看91| 日韩精品一区二区三区视频| 亚洲美女尤物影院| 精品国内产的精品视频在线观看| 国产a级片免费观看| 国产suv精品一区二区三区| 成人有码在线播放| 午夜a一级毛片亚洲欧洲| 亚洲男人天堂古典| 日日夜夜亚洲| 国产精品视频网| 美女视频黄免费的久久 | 成人综合在线视频| 潘金莲一级淫片aaaaaa播放1| 中文字幕在线不卡国产视频| 婷婷激情一区| 国产精品久久久久久久久久久久冷| 成人免费视频视频| 香蕉影院在线| 国产99久久久国产精品免费看| 国产美女特级嫩嫩嫩bbb片| 日韩欧美中文字幕公布| 牛夜精品久久久久久久99黑人| 中文字幕在线导航| 美日韩在线视频| 久久亚洲综合色一区二区三区| 另类中文字幕国产精品| japanese在线播放| 久久五月情影视| 国产v综合v亚洲欧| 欧美性生活一级片| 情事1991在线| 亚洲欧美中日韩| 久久国产精品成人免费观看的软件| 国产成人av影视| 人人爽久久涩噜噜噜网站| 欧美日韩另类字幕中文| 福利视频免费在线观看| 羞羞网站在线看| 奇米影视首页 狠狠色丁香婷婷久久综合 | 里番在线观看网站| 一区二区在线视频观看| 337p日本| 日本一区二区三区视频在线播放| 亚洲欧美中文日韩在线v日本| 成人av网站在线观看免费| 五月综合激情| 男女性色大片免费观看一区二区| 伊人国产在线看一| 中文字幕亚洲欧美日韩高清| 韩国精品福利一区二区三区 | 国产大片一区| 国产精品日韩欧美一区二区| 色婷婷久久久综合中文字幕| 亚洲国产日韩欧美在线| 污污影院在线观看| 国产一二三四区在线观看| 亚洲色无码播放| 国产私拍一区| 亚洲国产一区二区三区| 欧美r级电影| 久久野战av| 久久波多野结衣| 国产成人一区| 国产 日韩 欧美在线| 亚洲欧美日韩久久| 日韩毛片免费视频一级特黄| 久久精品日韩精品| 欧美性猛交xxxx富婆弯腰| 欧美wwwwww| 中文av一区二区三区| 一区二区三区视频免费在线观看| 日韩国产欧美三级| 黄色动漫在线| 欧美日韩在线播放一区二区| 色综合网色综合| 最新欧美人z0oozo0| 亚洲图片123| 成人国产精品日本在线| 夜夜嗨av一区二区三区四季av| 欧美激情99| 男人的天堂在线播放| 日韩av免费看| 午夜一区二区三区视频| 国产精品一线天粉嫩av| 午夜影院免费| 成人免费网站在线| 欧美色视频日本版| 欧美日韩福利| 国产精品久久一区二区三区不卡| 2021国产精品久久精品| 国产黄大片在线观看画质优化| 成人片在线免费看| 欧美日本高清视频在线观看| 亚洲精选久久| 免费毛片在线看片免费丝瓜视频 | 欧美另类精品xxxx孕妇| 免费观看一级特黄欧美大片| av免费在线网站| 亚洲精品中文字幕在线| 精品国产一区二区三区四区四| 激情综合网激情| 91大神在线观看线路一区| 国产免费黄视频| 97超级碰在线看视频免费在线看 | 台湾成人av| 亚洲精品99久久久久中文字幕| 久久精品国产色蜜蜜麻豆| 成人在线免费观看黄色| 国产一区二区三区播放| 欧美二区在线播放| 狠狠综合久久av一区二区小说| 国产精品资源| 亚洲承认视频| wwwav91com| 精品一区二区三区视频日产| 日韩av在线免播放器| 国产不卡视频一区二区三区| 国产黄色在线免费观看| 欧美色道久久88综合亚洲精品| 亚洲图片你懂的| 欧美三级美国一级| 国产91福利| 国产精品午夜av在线| 欧美精品一区二区三区蜜桃 | 日韩av免费在线| 欧美精品三级在线观看| 国产suv精品一区二区883| 亚洲区小说区| 在线观看av黄网站永久| www.av片| 成人两性免费视频| 精品国产免费一区二区三区四区| 97se狠狠狠综合亚洲狠狠| 国产精选一区| 国产污视频在线播放| 成人午夜激情| 色婷婷精品国产一区二区三区| 久久av红桃一区二区小说| 日韩人在线观看| 99在线精品观看| 在线国产日韩| 日本在线成人| 国产精品—色呦呦| av在线不卡播放| 久久视频这里有精品| 99久久99久久精品国产片|