RabbitMQ實(shí)現(xiàn)消息可靠性傳遞過(guò)程講解
目錄結(jié)構(gòu)
導(dǎo)入依賴
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> <version>2.5.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
修改yml
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
publisher-confirm-type: correlated # 開(kāi)啟確認(rèn)回調(diào)
publisher-returns: true # 開(kāi)啟退回回調(diào)
在publisher-confirm-type中有三個(gè)確認(rèn)消息接受類型:none、correlated、simple。
publisher-confirm-type: none 表示禁用發(fā)布確認(rèn)模式。是默認(rèn)值。使用此模式之后,不管消息有沒(méi)有發(fā)送到Broker(RabbitMQ)都不會(huì)觸發(fā)ConfirmCallback回調(diào)。
publisher-confirm-type: correlated 表示消息成功到達(dá)Broker后觸發(fā)ConfirmCalllBack回調(diào)。
publisher-confirm-type: simple 表示如果消息成功到達(dá)Broker后一樣會(huì)觸發(fā)ConfirmCalllBack回調(diào),發(fā)布消息成功后使用rabbitTemplate調(diào)用waitForConfirms()或waitForConfirmsOrDie()方法等待Broker節(jié)點(diǎn)返回發(fā)送結(jié)果,根據(jù)返回結(jié)果來(lái)判定下一步的邏輯。如果waitForConfirmsOrDie()方法如果返回false則會(huì)關(guān)閉channel信道,則接下來(lái)無(wú)法發(fā)送消息到Broker。
業(yè)務(wù)邏輯
@SpringBootTest @RunWith(SpringRunner.class) class RabbitmqProducerApplicationTests { @Autowired private RabbitTemplate rabbitTemplate; @Test void testProducer() { rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() { //三個(gè)參數(shù)分別為:相關(guān)配置消息、交換機(jī)是否收到消息、未收到消息的原因 @Override public void confirm(CorrelationData correlationData, boolean b, String s) { if(b) System.out.println("交換機(jī)成功接受到了消息"); else System.out.println("消息失敗原因" + s); } }); // 設(shè)置交換機(jī)處理失敗消息的模式 // true:消息到達(dá)不了隊(duì)列時(shí) 會(huì)將消息重新返回給生產(chǎn)者 false:消息到達(dá)不了隊(duì)列直接丟棄(默認(rèn)) rabbitTemplate.setMandatory(true); rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() { //五個(gè)參數(shù)分別為:消息對(duì)象、失敗狀態(tài)碼、失敗信息、交換機(jī)名稱、路由鍵 @Override public void returnedMessage(Message message, int i, String s, String s1, String s2) { System.out.println("隊(duì)列接受不到交換機(jī)的消息進(jìn)行了失敗回調(diào)"); } }); rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME,"test.heHe","HelloWorld"); } }
測(cè)試結(jié)果
為了測(cè)試是否進(jìn)行了確認(rèn)回調(diào)方法即confirmCallBack()方法,我將上方的交換機(jī)名稱故意寫(xiě)錯(cuò)
rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME + "1","test.heHe","HelloWorld");
為了測(cè)試是否進(jìn)行了退回回調(diào)方法即returnCallBack()方法,我將上方的路由鍵名稱故意寫(xiě)錯(cuò)
rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME,"t.heHe","HelloWorld");
總結(jié)
經(jīng)上方兩次測(cè)試,可以使用ConfirmCallBack與ReturnCallBack來(lái)確認(rèn)消息的可靠性傳遞。ConfirmCallBack是確認(rèn)交換機(jī)是否可以成功接收到消息,而ReturnCallBack是確認(rèn)隊(duì)列是否可以成功接收到交換機(jī)發(fā)來(lái)的消息。這是作為解決作為消息發(fā)送方希望杜絕任何消息丟失或者投遞失敗場(chǎng)景。 但需要注意的是在yml中必須添加兩行配置。
到此這篇關(guān)于RabbitMQ實(shí)現(xiàn)消息可靠性傳遞過(guò)程講解的文章就介紹到這了,更多相關(guān)RabbitMQ消息可靠性傳遞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMVC的處理器適配器-HandlerAdapter的用法及說(shuō)明
這篇文章主要介紹了SpringMVC的處理器適配器-HandlerAdapter的用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Android?Java判斷密碼強(qiáng)度方法實(shí)例(強(qiáng)度顯示)
在現(xiàn)代社會(huì)中,密碼是確保我們個(gè)人信息和賬戶安全的重要手段之一,為了提高密碼的安全性,我們可以使用正則表達(dá)式來(lái)判斷密碼的強(qiáng)度,這篇文章主要給大家介紹了關(guān)于Android?Java判斷密碼強(qiáng)度(強(qiáng)度顯示)的相關(guān)資料,需要的朋友可以參考下2024-03-03jenkins按模塊進(jìn)行構(gòu)建遇到的問(wèn)題及解決方案
這篇文章主要介紹了jenkins按模塊進(jìn)行構(gòu)建的問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05深入淺析Spring Security5中默認(rèn)密碼編碼器
這篇文章主要介紹了Spring Security5中默認(rèn)密碼編碼器,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-05-05SpringMVC攔截器實(shí)現(xiàn)單點(diǎn)登錄
這篇文章主要介紹了SpringMVC攔截器實(shí)現(xiàn)單點(diǎn)登錄,簡(jiǎn)單介紹了springmvc攔截器,單點(diǎn)登錄實(shí)現(xiàn)原理等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11SpringBoot2.0+阿里巴巴Sentinel動(dòng)態(tài)限流實(shí)戰(zhàn)(附源碼)
這篇文章主要介紹了SpringBoot2.0+阿里巴巴Sentinel動(dòng)態(tài)限流實(shí)戰(zhàn)(附源碼),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11IntelliJ IDEA引入第三方j(luò)ar包或查看Java源碼的時(shí)候報(bào)decompiled.class file byt
今天小編就為大家分享一篇關(guān)于IntelliJ IDEA引入第三方j(luò)ar包或查看Java源碼的時(shí)候報(bào)decompiled.class file bytecode version:52.0(java 8)錯(cuò)誤的解決辦法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10Spring Boot延遲執(zhí)行實(shí)現(xiàn)方法
本文介紹了在Spring Boot項(xiàng)目中延遲執(zhí)行方法的實(shí)現(xiàn),以及延遲執(zhí)行下聲明式事務(wù)和編程式事務(wù)的使用情況,感興趣的朋友一起看看吧2020-12-12