Spring?Boot+RabbitMQ?通過(guò)fanout模式實(shí)現(xiàn)消息接收功能(支持消費(fèi)者多實(shí)例部署)
本文章適用的場(chǎng)景:同一條消息可以被多個(gè)消費(fèi)者同時(shí)消費(fèi)。注意:當(dāng)消費(fèi)者多實(shí)例部署時(shí),會(huì)輪詢消費(fèi)消息。網(wǎng)上有大量的的案例展示:P生產(chǎn)一條消息,消費(fèi)者服務(wù)C中建立Q1和Q2兩個(gè)隊(duì)列共同消費(fèi)。但極少的材料展示:P生產(chǎn)一條消息后M1,消費(fèi)者C1和C2可以同時(shí)消費(fèi)M1,如下圖所示。案例基于Spring Boot以及RabbitMQ的“fanout”類型exchange。已經(jīng)實(shí)測(cè)可放心使用。
1、引入基本依賴,項(xiàng)目不同請(qǐng)您按自己的情況引入合適的依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
2、rabbitmq密碼、用戶名等配置
內(nèi)容過(guò)于基礎(chǔ),請(qǐng)網(wǎng)絡(luò)上自行搜索相關(guān)內(nèi)容。
3、Exchange配置
@Bean public FanoutExchange myFanoutExchange() { //“my.fanout”僅用于演示,請(qǐng)按自己的項(xiàng)目情況選擇合適的、有意義的命名 return new FanoutExchange("my.fanout", true, false); } @Bean public Queue anonymousQueue() { //注意:必須使用匿名隊(duì)列才能達(dá)到本文目標(biāo),此匿名隊(duì)列實(shí)例的名稱在消費(fèi)端會(huì)被使用 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應(yīng)為null或“”,如果您的代碼只需要發(fā)送消息而無(wú)接收,請(qǐng)忽略第3小節(jié)“Exchange配置”中所示代碼
5、消費(fèi)者代碼
@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”對(duì)應(yīng)第3小節(jié)“Exchange配置”中所聲明的匿名隊(duì)列實(shí)例。
到此這篇關(guān)于Spring Boot+RabbitMQ 通過(guò)fanout模式實(shí)現(xiàn)消息接收(支持消費(fèi)者多實(shí)例部署)的文章就介紹到這了,更多相關(guān)Spring Boot RabbitMQ實(shí)現(xiàn)消息接收內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringSecurity實(shí)現(xiàn)動(dòng)態(tài)url攔截(基于rbac模型)
本文主要介紹了SpringSecurity動(dòng)態(tài)url攔截,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08SpringBoot切面攔截@PathVariable參數(shù)及拋出異常的全局處理方式
這篇文章主要介紹了SpringBoot切面攔截@PathVariable參數(shù)及拋出異常的全局處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08詳解idea maven項(xiàng)目如何使用lib下得jar包
這篇文章主要介紹了詳解idea maven項(xiàng)目如何使用lib下得jar包,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12SpringBoot使用Flyway進(jìn)行數(shù)據(jù)庫(kù)遷移的實(shí)現(xiàn)示例
Flyway是一個(gè)數(shù)據(jù)庫(kù)遷移工具,它提供遷移歷史和回滾的功能,本文主要介紹了如何使用Flyway來(lái)管理Spring Boot應(yīng)用程序中的SQL數(shù)據(jù)庫(kù)架構(gòu),感興趣的可以了解一下2023-08-08Spring Cloud實(shí)戰(zhàn)技巧之使用隨機(jī)端口
這篇文章主要給大家介紹了關(guān)于Spring Cloud實(shí)戰(zhàn)技巧之使用隨機(jī)端口的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-06-06java基于jdbc連接mysql數(shù)據(jù)庫(kù)功能實(shí)例詳解
這篇文章主要介紹了java基于jdbc連接mysql數(shù)據(jù)庫(kù)功能,結(jié)合實(shí)例形式詳細(xì)分析了jdbc連接mysql數(shù)據(jù)庫(kù)的原理、步驟、實(shí)現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下2017-10-10關(guān)于shiro中部分SpringCache失效問(wèn)題的解決方法
這篇文章主要給大家介紹了關(guān)于shiro中部分SpringCache失效問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07