【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.mzph.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;在字…

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--最后一个单词的长度

文章目录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;本文将进一步…

26-- 转换成小写字母

文章目录1.问题描述2.代码详情1.问题描述 实现函数 ToLowerCase()&#xff0c;该函数接收一个字符串参数 str&#xff0c;并将该字符串中的大写字母转换成小写字母&#xff0c;之后返回新的字符串。 示例 1&#xff1a; 输入: “Hello” 输出: “hello” 示例 2&#xff1a;…

初学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;提升了用…

[转] 一文弄懂神经网络中的反向传播法——BackPropagation

在看CNN和RNN的相关算法TF实现&#xff0c;总感觉有些细枝末节理解不到位&#xff0c;浮在表面。那么就一点点扣细节吧。 这个作者讲方向传播也是没谁了&#xff0c;666&#xff5e; 原文地址&#xff1a;https://www.cnblogs.com/charlotte77/p/5629865.html 最近在看深度学习…

FreeBSD 8.3 发布

近日&#xff0c;FreeBSD开发团队放出了8.x稳定分支的8.3版本。此次发行的版本将支持amd64、i386、pc98和 sparc64等处理器类型。FreeBSD是一种类UNIX操作系统&#xff0c;但不是真正意义上的 UNIX 操作系统&#xff0c;它是由经过 BSD、386BSD 和 4.4BSD 发展而来的 Unix 的一…

28--仅仅反转字母

文章目录1.问题描述2.代码详情1.问题描述 给定一个字符串 S&#xff0c;返回 “反转后的” 字符串&#xff0c;其中不是字母的字符都保留在原地&#xff0c;而所有字母的位置发生反转。 示例 1&#xff1a; 输入&#xff1a;“ab-cd” 输出&#xff1a;“dc-ba” 示例 2&…

Moving Average

移动平均算法Demo #!/usr/bin/python2.7 # Fetch data from BD and analyse.import json import urllib import traceback import numpy as np # import pandas as pd import matplotlib.pyplot as plt #from scipy import statsdef fetch_raw_data(url):try:response urllib.…

【前端工程师手册】JavaScript作用域拾遗

【前端工程师手册】JavaScript作用域拾遗 昨天总结了一些作用域的知识【前端工程师手册】JavaScript之作用域&#xff0c;但是发表完发现忘记了一些东西&#xff0c;今天拾个遗。 昨天说到了JavaScript中没有块级作用域&#xff0c;其实在es6中是有的。 es6中的块级作用域 先举…

游戏开发中的数据表示

声明&#xff1a;本文内容源自腾讯游戏学院程序公开课_服务端 一、数据表示的基础 什么是数据表示&#xff1f; 数据是信息的载体。 数据表示是一组操作&#xff0c;可以描述、显示、操作信息。 数据表示的要素 IDL - 接口描述语言 IDL是用来描述软件组件接口的一种计算机语言。…

29--反转字符串

文章目录1.问题描述2.代码详情1.问题描述 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中…

OpenBSD 5.1 正式版发布

OpenBSD 开发团队于近日发布了 5.1 正式版。 OpenBSD是一个从NetBSD衍生出来的类Unix操作系统。项目领导人Theo de Raadt在1995年发起了OpenBSD项目&#xff0c;希望创造一个注重安全的操作系统&#xff0c;此外OpenBSD也以高品质的文件、坚持开放程式码以及严格的软件授权著名…

PowerShell变量——PowerShell三分钟(七)

有了前面的PowerShell基础&#xff0c;今天我们来学习一个可以极大提升PowerShell效率的用法——变量简答来说呢&#xff0c;变量就是在内存中的一个带有名字的盒子~~~~~你可以把所有想存放的东西都放到这个“盒子”里。然后通过名字去访问这个盒子。在访问过程中&#xff0c;可…

Machine Learning - Coursera week6 Evaluating a learning algorithm

Evaluating a learning algorithm 1. Design what to do next 在预测房价的学习例子&#xff0c;假如你已经完成了正则化线性回归&#xff0c;也就是最小化代价函数J的值。假如在你得到你的学习参数以后把它应用到放到一组新的房屋样本上进行测试&#xff0c;发现在预测房价时产…