Spring Boot整合RabbitMQ開發(fā)實戰(zhàn)詳解
這篇文章主要講基本的整合。先把代碼跑起來,再說什么高級特性。
RabbitMQ 中的一些術(shù)語
如果你打開 RabbitMQ web 控制臺,你會發(fā)現(xiàn)其中有一個 Exhanges 不好理解。下面簡單說明一下。
交換器(Exchange)
交換器就像路由器,我們先是把消息發(fā)到交換器,然后交換器再根據(jù)路由鍵(routingKey)把消息投遞到對應(yīng)的隊列。(明白這個概念很重要,后面的代碼里面充分體現(xiàn)了這一點)
隊列(Queue)
隊列很好理解,就不用解釋了。
綁定(Binding)
交換器怎么知道把這條消息投遞到哪個隊列呢?這就需要用到綁定了。大概就是:使用某個路由鍵(routingKey)把某個隊列(Queue)綁定到某個交換器(Exchange),這樣交換器就知道根據(jù)路由鍵把這條消息投遞到哪個隊列了。(后面的代碼里面充分體現(xiàn)了這一點)
加入 RabbitMQ maven 依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
再加入另外一個依賴(這個依賴可省略,主要是用來簡化代碼)
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.0.2</version> </dependency>
RabbitMQConfig.java 配置
@Configuration public class RabbitMQConfig { public final static String QUEUE_NAME = "spring-boot-queue"; public final static String EXCHANGE_NAME = "spring-boot-exchange"; public final static String ROUTING_KEY = "spring-boot-key"; // 創(chuàng)建隊列 @Bean public Queue queue() { return new Queue(QUEUE_NAME); } // 創(chuàng)建一個 topic 類型的交換器 @Bean public TopicExchange exchange() { return new TopicExchange(EXCHANGE_NAME); } // 使用路由鍵(routingKey)把隊列(Queue)綁定到交換器(Exchange) @Bean public Binding binding(Queue queue, TopicExchange exchange) { return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY); } @Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory("127.0.0.1", 5672); connectionFactory.setUsername("guest"); connectionFactory.setPassword("guest"); return connectionFactory; } @Bean public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { return new RabbitTemplate(connectionFactory); } }
生產(chǎn)者
直接調(diào)用 rabbitTemplate 的 convertAndSend 方法就可以了。從下面的代碼里也可以看出,我們不是把消息直接發(fā)送到隊列里面的,而是先發(fā)送到了交換器,交換器再根據(jù)路由鍵把我們的消息投遞到對應(yīng)的隊列。
@RestController public class ProducerController { @Autowired private RabbitTemplate rabbitTemplate; @GetMapping("/sendMessage") public Object sendMessage() { new Thread(() -> { for (int i = 0; i < 100; i++) { String value = new DateTime().toString("yyyy-MM-dd HH:mm:ss"); Console.log("send message {}", value); rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, RabbitMQConfig.ROUTING_KEY, value); } }).start(); return "ok"; } }
消費(fèi)者
消費(fèi)者也很簡單,只需要對應(yīng)的方法上加入 @RabbitListener 注解,指定需要監(jiān)聽的隊列名稱即可。
@Component public class Consumer { @RabbitListener(queues = RabbitMQConfig.QUEUE_NAME) public void consumeMessage(String message) { Console.log("consume message {}", message); } }
運(yùn)行項目
運(yùn)行項目,然后打開瀏覽器,輸入 http://localhost:9999/sendMessage
。在控制臺就可以看到生產(chǎn)者在不停的的發(fā)送消息,消費(fèi)者不斷的在消費(fèi)消息。
打開 RabbitMQ web 控制臺,也可以看到剛才我們在代碼里面配置的交換器和隊列,以及綁定信息。
點擊進(jìn)入交換器的詳情
結(jié)語
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Spring Boot整合RabbitMQ實例(Topic模式)
- spring boot整合RabbitMQ實例詳解(Fanout模式)
- springboot整合rabbitmq的示例代碼
- spring boot整合RabbitMQ(Direct模式)
- SpringBoot整合RabbitMQ 手動應(yīng)答(簡單demo)
- Springboot 整合RabbitMq(用心看完這一篇就夠了)
- SpringBoot整合RabbitMQ, 實現(xiàn)生產(chǎn)者與消費(fèi)者的功能
- springBoot整合rabbitMQ的方法詳解
- SpringBoot整合RabbitMQ消息隊列的完整步驟
相關(guān)文章
Spring實戰(zhàn)之讓Bean獲取Spring容器操作示例
這篇文章主要介紹了Spring實戰(zhàn)之讓Bean獲取Spring容器操作,結(jié)合實例形式分析了Bean獲取Spring容器的相關(guān)原理、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下2019-11-11Idea導(dǎo)入多個maven項目到同一目錄下的方法示例
這篇文章主要介紹了Idea導(dǎo)入多個maven項目到同一目錄下,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07SpringMVC如何在生產(chǎn)環(huán)境禁用Swagger的方法
本篇文章主要介紹了SpringMVC如何在生產(chǎn)環(huán)境禁用Swagger的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02使用RocketMQTemplate發(fā)送帶tags的消息
這篇文章主要介紹了使用RocketMQTemplate發(fā)送帶tags的消息,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07java用接口、多態(tài)、繼承、類計算三角形和矩形周長及面積的方法
這篇文章主要介紹了java用接口、多態(tài)、繼承、類計算三角形和矩形周長及面積的方法,涉及java面向?qū)ο笾蓄?、接口、多態(tài)等的使用技巧,需要的朋友可以參考下2015-05-05一文搞懂java中類及static關(guān)鍵字執(zhí)行順序
這篇文章主要介紹了一文搞懂java中類及static關(guān)鍵字執(zhí)行順序,文章通過類的生命周期展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09SpringMVC學(xué)習(xí)之JSON和全局異常處理詳解
在項目上線之后,往往會出現(xiàn)一些不可預(yù)料的異常信息,對于邏輯性或設(shè)計性問題,開發(fā)人員或者維護(hù)人員需要通過日志,查看異常信息并排除異常,這篇文章主要給大家介紹了關(guān)于SpringMVC學(xué)習(xí)之JSON和全局異常處理的相關(guān)資料,需要的朋友可以參考下2022-10-10spring-cloud-gateway動態(tài)路由的實現(xiàn)方法
這篇文章主要介紹了spring-cloud-gateway動態(tài)路由的實現(xiàn)方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01MySQL中drop、truncate和delete的區(qū)別小結(jié)
在MySQL數(shù)據(jù)庫管理中,常常需要執(zhí)行刪除數(shù)據(jù)的操作,本文主要介紹了MySQL中drop、truncate和delete的區(qū)別小結(jié),具有一定的參考價值,感興趣的可以了解一下2024-04-04