RabbitMQ学习(十五):消极确认(Negative Acknowledgements)
说明
在之前的一篇博文《RabbitMQ学习(十三):死信交换机 (Dead Letter Exchanges)》中我们了解到,消息变为死信有三个原因,其中就有因为消费者的消极确认(negative acknowledgements),并且将requeue标记设置为false导致消息变为死信。本篇博文将继续翻译学习RabbitMQ官方文档中有关Negative Acknowledgements的内容,了解basic.reject和basic.nack方法的区别,及消息被拒绝后的处理方式。
正文
概述
在AMQP 0-9-1协议中,消费者可以选择使用手动确认的方式确认消息。
AMQP 0-9-1协议定义了basic.reject方法,允许客户端拒绝接收到的消息。消息被拒绝后,服务器会将消息丢弃或者重新入队派发。但这个方法不支持批量拒绝确认消息。
为了解决这个问题,RabbitMQ提供了basic.nack方法,该方法支持basic.reject方法的所有功能,同时允许客户端可以批量地处理消息。
使用
要批量拒绝消息,客户端需要使用basic.nack方法并且将multiple标记设置为true。服务器将处理所有的已发送但未确认的消息,同时也包括在basic.nack方法中delivery_tay字段标记的消息。这样,basic.nack方法就可以实现与basic.ack方法相似的批量处理消息的操作。
不管是长期运行的消费者还是基于poll方式(使用basic.get方法)消费的消费者,都可以使用两种方法进行消极确认。
当一个消息被重新入队,它可能会被放置在原来在队列的位置上。但也会因为存在多个消费者共享一个队列进行消费的情况,不会回到原来位置。但是消息重新入队后也会被放到尽可能靠近队头的位置。
示例
使用java客户端,在poll方式消费的情况下拒绝一个消息,并要求重新入队(basicNack方法第三个参数是requeue标记)。
GetResponse gr = channel.basicGet("some.queue", false);
channel.basicNack(gr.getEnvelope().getDeliveryTag(), false, true);
以下示例,调用一次方法拒绝两个消息(basicNack方法的第二个参数是multiple标记)
GetResponse gr1 = channel.basicGet("some.queue", false);
GetResponse gr2 = channel.basicGet("some.queue", false);
channel.basicNack(gr2.getEnvelope().getDeliveryTag(), true, true);
原文地址: https://www.rabbitmq.com/nack.html
RabbitMQ学习(十五):消极确认(Negative Acknowledgements)相关推荐
- Linux学习十五 DNS基础服务
Linux学习十五 DNS基础服务 DNS服务基础 BIND 伯利克Internet 域名服务 主要执行程序:/usr/sbin/named 系统服务:named 默认端口: TCP/UDP 53 主 ...
- OpenCV与图像处理学习十五——LBP纹理特征(含代码)
OpenCV与图像处理学习十五--LBP纹理特征(含代码) 一.LBP介绍 二.LBP原理 三.代码应用 一.LBP介绍 LBP(Local Binary Pattern, 局部二值模式) , 是一种 ...
- PyTorch框架学习十五——可视化工具TensorBoard
PyTorch框架学习十五--可视化工具TensorBoard 一.TensorBoard简介 二.TensorBoard安装及测试 三.TensorBoard的使用 1.add_scalar() 2 ...
- C++学习 十五、类继承(1)基类,派生类,访问权限,protected
C++学习 十五.类继承(1)基类,派生类 前言 类继承 类的关系与继承 基类, 派生类 基类 派生类 构造函数,析构函数 文件位置 访问权限 protected 后记 前言 本篇开始学习C++类的继 ...
- OpenGL入门学习(十五)
OpenGL入门学习[十五] 这次讲的所有内容都装在一个立方体中,呵呵. 呵呵,绘制一个立方体,简单呀,我们学了第一课第二课,早就会了. 先别着急,立方体是很简单,但是这里只是拿立方体做一个例子,来说 ...
- 强化学习(十五) A3C
在强化学习(十四) Actor-Critic中,我们讨论了Actor-Critic的算法流程,但是由于普通的Actor-Critic算法难以收敛,需要一些其他的优化.而Asynchronous Adv ...
- 推荐系统遇上深度学习(十五)--强化学习在京东推荐中的探索
强化学习在各个公司的推荐系统中已经有过探索,包括阿里.京东等.之前在美团做过的一个引导语推荐项目,背后也是基于强化学习算法.本文,我们先来看一下强化学习是如何在京东推荐中进行探索的. 本文来自于pap ...
- RabbitMq(十五)消息的追踪查看配置及查看方法
消息追踪使用的是rabbitmq的trace插件,trace相关命令如下: rabbitmq-plugins list 查看所有安装插件列表 rabbitmq-plugins enable rabbi ...
- 智能车学习(十五)——K60野火2013版例程
一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,5);//定时中断初始化 set_vector_handler(PIT0 ...
最新文章
- 阿里开源Mysql分布式中间件:Cobar
- 033-Unit 5 Standard I/O and Pipes
- 基于EasyDarwin实现幼儿园监控类项目
- python英文文献翻译_科研神器(1)——python实现自动读取英文文献翻译并生成综述...
- mysql-外键-随堂
- androidstudio打包apk 文件_Android 打包生成APK文件时报lintOptions配置错误
- 运营商数据治理实践-郭岳
- c语言加减乘除运算代码_科协推文 || 走进C语言
- 作为一个生鲜电商自媒体
- AD 组策略应用与排错(2排错)
- SpringBoot, 启动类,使用「SpringBootApplication」标注
- Springcloud学习系列之Ribbon自定义负载均衡规则
- iOS 高级工程师是怎么进阶
- 京东预测系统核心介绍
- android 通过adb命令控制wifi开关
- VsCode使用及常用命令汇总(Win10)
- 使用腾讯云sms实现短信验证功能
- RC滤波器(高通/低通)
- 周口师范学院计算机科学,关于公布周口师范学院-计算机科学与技术学院.doc
- 我想转行程序员,上个编程培训班,能找到工作吗?我可以自学吗?