日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
三分鐘實現(xiàn)SpringBoot集成RabbitMQ,實現(xiàn)消息隊列服務(wù)

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

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

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

一、Spring Boot集成RabbitMQ

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

第一步,配置pom包。

創(chuàng)建Spring Boot項目并在pom.xml文件中添加spring-bootstarter-amqp等相關(guān)組件依賴:

 
 
 
 
  1. org.springframework.boot
  2. spring-boot-starter-amqp

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

第二步,修改配置文件。

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

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

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

第三步,創(chuàng)建消費者。

消費者可以消費生產(chǎn)者發(fā)送的消息。接下來創(chuàng)建消費者類Consumer,并使用@RabbitListener注解來指定消息的處理方法。示例代碼如下:

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

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

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

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

第四步,創(chuàng)建生產(chǎn)者。

生產(chǎn)者用來產(chǎn)生消息并進行發(fā)送,需要用到RabbitTemplate類。與之前的RedisTemplate類似,RabbitTemplate是實現(xiàn)發(fā)送消息的關(guān)鍵類。示例代碼如下:

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

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

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

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

最后,測試驗證。

創(chuàng)建對應(yīng)的測試類ApplicationTests,驗證消息發(fā)送和接收是否成功。

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

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

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

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

二、發(fā)送和接收實體對象

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

1. 定義實體類

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

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

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

2. 定義消費者

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

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

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

3. 定義生產(chǎn)者

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

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

在上面的示例中,還是調(diào)用convertAndSend()方法發(fā)送實體對象。convertAndSend()方法支持String、Integer、Object等基礎(chǔ)的數(shù)據(jù)類型。

4. 驗證測試

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

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

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

通過上面的示例成功實現(xiàn)了RabbitMQ發(fā)送和接收實體對象,使得消息的數(shù)據(jù)結(jié)構(gòu)更加清晰,也更加貼合面向?qū)ο蟮木幊趟枷搿?/p>
當前文章:三分鐘實現(xiàn)SpringBoot集成RabbitMQ,實現(xiàn)消息隊列服務(wù)
網(wǎng)頁網(wǎng)址:http://www.5511xx.com/article/dpidche.html