【RabbitMQ】6、rabbitmq生產者的消息確認

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

通過Publisher Confirms and Returns機制,生產者可以判斷消息是否發送到了exchange及queue,而通過消費者確認機制,Rabbitmq可以決定是否重發消息給消費者,以保證消息被處理。

1.什么是Publisher Confirms and Returns?

Delivery processing acknowledgements from consumers to RabbitMQ are known as acknowledgements in AMQP 0-9-1 parlance; broker acknowledgements to publishers are a protocol extension called publisher confirms.?
地址:http://www.rabbitmq.com/confirms.html

根據RabbitMq官網定義,rabbitmq代理(broker)對發布者(publishers)的確認被稱作發布者確認(publisher confirms),這種機制是Rabbitmq對標準Amqp協議的擴展。因此通過這種機制可以確認消息是否發送給了目標。

2.如何通過Spring amqp來使用Publisher Confirms and Returns機制?

Confirmed and returned messages are supported by setting the CachingConnectionFactory’s publisherConfirms and publisherReturns properties to ‘true’ respectively.When these options are set, Channel s created by the factory are wrapped in an PublisherCallbackChannel, which is used to facilitate the callbacks. When such a channel is obtained, the client can register a PublisherCallbackChannel.Listener with the Channel. The PublisherCallbackChannel implementation contains logic to route a confirm/return to the appropriate listener. These features are explained further in the following sections.?
http://docs.spring.io/spring-amqp/docs/1.6.3.RELEASE/reference/html/_reference.html#cf-pub-conf-ret

通過Spring amqp文檔可以看到,要使用這種機制需要將Template模版的設publisherConfirms 或publisherReturns 屬性設置為true,此外ConnectionFactory要配置為CachingConnectionFactory。

復制代碼

<bean id="connectionFactory"class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory"><property name="host" value="192.168.2.133" /><property name="port" value="5672" /><property name="username" value="sun" /><property name="password" value="123456" /><property name="publisherConfirms" value="true" /><property name="publisherReturns" value="true" /></bean>

復制代碼

2.1 ConfirmCallback的使用及觸發的一種場景

復制代碼

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.support.CorrelationData;
import org.springframework.stereotype.Service;/*** @author wangzhongqiu*         Created on 2017/10/31.* @description:繼承RabbitTemplate.ConfirmCallback,消息確認監聽器*/
@Service
public class ConfirmCallBackListener implements RabbitTemplate.ConfirmCallback {private Logger log = LoggerFactory.getLogger(CommonProducer.class);@Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) {log.info("收到回調,成功發送到broker");}
}

復制代碼

2.2 ReturnCallback的使用及觸發的一種場景

復制代碼

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;/*** @author wangzhongqiu*         Created on 2017/10/31.* @description:繼承RabbitTemplate.ReturnCallback,消息發送失敗返回監聽器*/
@Service
public class ReturnCallBackListener implements RabbitTemplate.ReturnCallback {private Logger log = LoggerFactory.getLogger(CommonProducer.class);@Overridepublic void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {log.info("收到回調");log.info("return--message:" + new String(message.getBody()) + ",replyCode:" + replyCode + ",replyText:" + replyText + ",exchange:" + exchange + ",routingKey:" + routingKey);}
}

復制代碼

使用場景:

如果消息沒有到exchange,則confirm回調,ack=false

如果消息到達exchange,則confirm回調,ack=true

exchange到queue成功,則不回調return

exchange到queue失敗,則回調return(需設置mandatory=true,否則不回回調,消息就丟了)

轉載于:https://my.oschina.net/xiaominmin/blog/1811701

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451780.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451780.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451780.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

泛型方法

java泛型方法簡單介紹

修改jquery文件上傳插件uploadify的英文為中文

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 效果&#xff1a; 對于這種樣式的問題&#xff0c;我都是簡單粗爆的解決&#xff1a; 找到uploadify的js文件&#xff0c;通常不是js&…

24--反轉字符串中的單詞 III

文章目錄1.問題描述2. 代碼詳情1.問題描述 給定一個字符串&#xff0c;你需要反轉字符串中每個單詞的字符順序&#xff0c;同時仍保留空格和單詞的初始順序。 示例 1: 輸入: “Let’s take LeetCode contest” 輸出: “s’teL ekat edoCteeL tsetnoc” 注意&#xff1a;在字…

poj2976 Dropping tests

01分數規劃裸題 為毛二分一定要打成rmid這么惡心啊 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; typedef long long LL;int n,k; double a[1100…

Apache Cassandra 1.1.0 穩定版發布

Apache Cassandra團隊今天正式推出了1.1分支的首個穩定版1.1.0版本。Apache Cassandra是一套開源的分布式 NoSQL 數據庫系統&#xff0c;遵循 Apache Lience 2 協議。它最初由 Facebook 開發&#xff0c;用于儲存收件箱等簡單格式數據&#xff0c;集 Google BigTable 的數據模型…

如何僅花25美元并在3小時內完成ImageNet訓練?

譯者 | 核子可樂編輯 | Debra、VincentAI 前線導讀&#xff1a;在斯坦福大學建立的項目 DAWNBench 競賽中&#xff0c;CIFAR10 與 ImageNet 的表現引起了人們的關注&#xff0c;在目標基本一致的前提下&#xff0c;兩者的準確度分別達 94% 和 93%&#xff0c;在成本和速度上均有…

java中什么是上下文

所謂上下文&#xff0c;它是用來存儲系統的一些初始化信息&#xff0c;例如在jboss中通過配置文件指定了數據源&#xff0c;那么在jboss啟動的時候就把這個文件的相關信息加載到上下文中&#xff0c;于是在我們使用這個數據源的時候&#xff0c;就需要先獲得系統的上下文&#…

jquery文件上傳插件uploadify 講解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.名詞解釋&#xff1a; tracker服務器&#xff1a;中文叫做跟蹤器&#xff0c;主要做調度工作&#xff0c;在訪問上起負載均衡的作用。&…

POJ 1651 Multiplication Puzzle(類似矩陣連乘 區間dp)

傳送門&#xff1a;http://poj.org/problem?id1651 Multiplication PuzzleTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 13109 Accepted: 8034Description The multiplication puzzle is played with a row of cards, each containing a single positive integ…

25--最后一個單詞的長度

文章目錄1.問題描述2.代碼詳情1.問題描述 給定一個僅包含大小寫字母和空格 ’ ’ 的字符串 s&#xff0c;返回其最后一個單詞的長度。如果字符串從左向右滾動顯示&#xff0c;那么最后一個單詞就是最后出現的單詞。 如果不存在最后一個單詞&#xff0c;請返回 0 。 說明&…

MySQL 企業監控器 2.3.10 正式版發布

Oracle于近日發布了 MySQL 企業監控器 2.3.10 正式版。 MySQL企業監控器主要用于實施對數據庫進行監控和管理。通過它&#xff0c;數據庫管理員不但可以獲得高級的數據復制和數據庫監控功能&#xff0c;同時還可以簡化安裝流程。而且&#xff0c;無論是對于MySQL企業版&#xf…

Docker 跨主機網絡方案分析

PS&#xff1a;文章首發公眾號&#xff0c;歡迎大家關注我的公眾號&#xff1a;aCloudDeveloper&#xff0c;專注技術分享&#xff0c;努力打造干貨分享平臺&#xff0c;二維碼在文末可以掃&#xff0c;謝謝大家。 上篇文章介紹了容器網絡的單主機網絡&#xff0c;本文將進一步…

java中為什么使用上轉型和下轉型

為什么使用上轉型&#xff1f;因為當一個父類有很多子類&#xff0c;子類都重寫了父類的方法并加以使用。這時候&#xff0c;如果要在之前代碼讓你用其他子類來實現&#xff0c;就變得很簡單&#xff0c;只需要把A a new B();換成A a new C();&#xff08;假設B和C都繼承了A&…

session和cache的區別

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 以前實現數據的緩存有很多種方法&#xff0c;有客戶端的Cookie&#xff0c;有服務器端的Session和Application。 其中Cookie是保存在客…

第四個

。 轉載于:https://www.cnblogs.com/wxy2000/p/9657823.html

26-- 轉換成小寫字母

文章目錄1.問題描述2.代碼詳情1.問題描述 實現函數 ToLowerCase()&#xff0c;該函數接收一個字符串參數 str&#xff0c;并將該字符串中的大寫字母轉換成小寫字母&#xff0c;之后返回新的字符串。 示例 1&#xff1a; 輸入: “Hello” 輸出: “hello” 示例 2&#xff1a;…

java守護線程和用戶線程的區別

Java中的線程可以分為兩類&#xff0c;即用戶線程和守護線程。用戶線程是為了完成任務&#xff0c;而守護線程主要是為其他線程服務。 守護線程的唯一用途是為其他線程提供服務。守護線程會隨時中斷&#xff0c;因此不要在守護線程上使用需要釋放資源的資源&#xff0c;如輸入輸…

初學duboo+zookeeper

看了很多相關資料&#xff0c;其實都沒有自己動手試一次印象更深刻一些。找了很多教程&#xff0c;下工具&#xff0c;花了幾個小時終于讓程序跑起來了&#xff0c;下面說下步驟&#xff1a;1.java環境也就安裝jdk&#xff0c;我使用的是1.7版本&#xff0c;jdk安裝就不在這復述…

Fedora 17 Beta 版發布

Fedora團隊今天發布了Fedora 17 Beta版本&#xff0c;這是正式版本發布前的最后一個重要的里程碑版本。據該團隊介紹&#xff0c;正式版將在今年5月發布&#xff0c;將主要修復Beta版中發現的關鍵性bug。針對普通用戶的桌面改進&#xff1a; 采用GNOME 3.4&#xff0c;提升了用…

27--字符串相加

文章目錄1.問題描述2.代碼詳情1.問題描述 給定兩個字符串形式的非負整數 num1 和num2 &#xff0c;計算它們的和。 注意&#xff1a; num1 和num2 的長度都小于 5100. num1 和num2 都只包含數字 0-9. num1 和num2 都不包含任何前導零。 你不能使用任何內建 BigInteger 庫&…