Spring?Boot+RabbitMQ?通過fanout模式實現(xiàn)消息接收功能(支持消費者多實例部署)
本文章適用的場景:同一條消息可以被多個消費者同時消費。注意:當消費者多實例部署時,會輪詢消費消息。網(wǎng)上有大量的的案例展示:P生產(chǎn)一條消息,消費者服務C中建立Q1和Q2兩個隊列共同消費。但極少的材料展示:P生產(chǎn)一條消息后M1,消費者C1和C2可以同時消費M1,如下圖所示。案例基于Spring Boot以及RabbitMQ的“fanout”類型exchange。已經(jīng)實測可放心使用。
1、引入基本依賴,項目不同請您按自己的情況引入合適的依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
2、rabbitmq密碼、用戶名等配置
內(nèi)容過于基礎(chǔ),請網(wǎng)絡(luò)上自行搜索相關(guān)內(nèi)容。
3、Exchange配置
@Bean public FanoutExchange myFanoutExchange() { //“my.fanout”僅用于演示,請按自己的項目情況選擇合適的、有意義的命名 return new FanoutExchange("my.fanout", true, false); } @Bean public Queue anonymousQueue() { //注意:必須使用匿名隊列才能達到本文目標,此匿名隊列實例的名稱在消費端會被使用 return new AnonymousQueue(); public Binding bindAnonymousQueue() { return BindingBuilder.bind(anonymousQueue()).to(myFanoutExchange());
4、發(fā)送端代碼
//構(gòu)建回調(diào)返回的數(shù)據(jù) CorrelationData correlationData = new CorrelationData(UUIDUtils.getUUID()); Message msg = MessageBuilder.withBody(message.getBytes()) .setContentType(MessageProperties.CONTENT_TYPE_TEXT_PLAIN) .setCorrelationId(correlationData.getId()) .build(); try { rabbitTemplate.convertAndSend(exchangeName, null, msg, correlationData); } catch (Exception e) { logger.error(e.getMessage(), e); }
注意:“fanout"模式直接將消息發(fā)送到“exchange”,routing key應為null或“”,如果您的代碼只需要發(fā)送消息而無接收,請忽略第3小節(jié)“Exchange配置”中所示代碼
5、消費者代碼
@Service public class MyListener { @RabbitListener(queues = "#{anonymousQueue.name}") public void receive(String message, Message message1, Channel channel) { try { //your code } catch (Exception e) { logger.error(e.getMessage(), e); } finally { long deliverTag = message1.getMessageProperties().getDeliveryTag(); channel.basicAck(deliverTag, false); } } }
代碼“@RabbitListener…”中的“#{anonymousQueue.name}”中的“anonymousQueue”對應第3小節(jié)“Exchange配置”中所聲明的匿名隊列實例。
到此這篇關(guān)于Spring Boot+RabbitMQ 通過fanout模式實現(xiàn)消息接收(支持消費者多實例部署)的文章就介紹到這了,更多相關(guān)Spring Boot RabbitMQ實現(xiàn)消息接收內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringSecurity實現(xiàn)動態(tài)url攔截(基于rbac模型)
本文主要介紹了SpringSecurity動態(tài)url攔截,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08SpringBoot切面攔截@PathVariable參數(shù)及拋出異常的全局處理方式
這篇文章主要介紹了SpringBoot切面攔截@PathVariable參數(shù)及拋出異常的全局處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08SpringBoot使用Flyway進行數(shù)據(jù)庫遷移的實現(xiàn)示例
Flyway是一個數(shù)據(jù)庫遷移工具,它提供遷移歷史和回滾的功能,本文主要介紹了如何使用Flyway來管理Spring Boot應用程序中的SQL數(shù)據(jù)庫架構(gòu),感興趣的可以了解一下2023-08-08java基于jdbc連接mysql數(shù)據(jù)庫功能實例詳解
這篇文章主要介紹了java基于jdbc連接mysql數(shù)據(jù)庫功能,結(jié)合實例形式詳細分析了jdbc連接mysql數(shù)據(jù)庫的原理、步驟、實現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下2017-10-10關(guān)于shiro中部分SpringCache失效問題的解決方法
這篇文章主要給大家介紹了關(guān)于shiro中部分SpringCache失效問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-07-07