【原创】RabbitMQ 之 Negative Acknowledgements(翻译)

简介:

Negative Acknowledgements

The AMQP specification defines the basic.reject method that allows clients to reject individual, delivered messages, instructing the broker to either discard them or requeue them. Unfortunately, basic.reject provides no support for negatively acknowledging messages in bulk.
AMQP 标准定义了 basic.reject 方法以允许 client 拒绝单条的、被 deliver 的 message ,拒绝的同时还可以要求 broker 或者丢弃该 message ,或者将 message 做 requeue 。不幸的是,basic.reject 不支持一次对多条 message 进行 reject 。

To solve this, RabbitMQ supports the basic.nack method that provides all the functionality of basic.reject whilst also allowing for bulk processing of messages.
为了解决这个问题,RabbitMQ 实现了扩展方法 basic.nack 来提供一次对多条 message 进行 reject 的功能。

To reject messages in bulk, clients set the multiple flag of the basic.nack method to true. The broker will then reject all unacknowledged, delivered messages up to and including the message specified in the delivery_tag field of the basic.nack method. In this respect, basic.nack complements the bulk acknowledgement semantics of basic.ack.
为了使能一次 reject 多条 message 的功能,client 需要将 basic.nack 中的 multiple 属性设置为 true 。收到 basic.nack 后,broker 会知道,包含 delivery_tag 所对应 message 在内的、所有比该值小的 message 都被拒绝了(除了已经被 ack 的以外)。从这个角度来讲,basic.nack 与 basic.ack 在批量应答 message 的功能上互补。

This example rejects a single message, asking the broker to requeue it:
下面是一个 reject 单条消息,并要求 broker 将其 requeue 的例子:

?
1
2
GetResponse gr = channel.basicGet( "some.queue" , false);
channel.basicNack(gr.getEnvelope().getDeliveryTag(), false, true);

This example rejects two messages with a single call to the broker (the second argument on 
  basicNack    is the    multiple    flag):
下面是使用 AMQP 扩展信令中一次性 reject 两条 message 的例子(basicNack 的第二个参数为 multiple 标识   ):  
?
1
2
3
GetResponse gr1 = channel.basicGet( "some.queue" , false);
GetResponse gr2 = channel.basicGet( "some.queue" , false);
channel.basicNack(gr2.getEnvelope().getDeliveryTag(), true, true);


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
消息中间件 SQL 存储
超详细的RabbitMQ入门,看这篇就够了!
RabbitMQ入门,看这篇就够了
201344 64
|
消息中间件 存储 网络协议
爆肝3万字,为你吃透RabbitMQ,最详细的RabbitMQ讲解(VIP典藏版)
早在之前就了解到了消息中间件,但是一直没有系统的学习,最近花了一段时间系统学习了当下最为主流的 RabbitMQ 消息队列,学习过程中也随时记录,刚开始学习的时候懵懵懂懂,做的笔记都比较杂乱,系统学习完后我将笔记内容不断反复修改,对章节进行设计调整,最终整合出了以下好理解、案例多、超详细的 RabbitMQ 学习笔记,希望能帮到大家~
爆肝3万字,为你吃透RabbitMQ,最详细的RabbitMQ讲解(VIP典藏版)
|
消息中间件 算法 安全
Linux安装RabbitMq(图文解说详细版)
Linux安装RabbitMq(图文解说详细版)
Linux安装RabbitMq(图文解说详细版)
|
消息中间件 Java Kafka
RabbitMQ安装以及消息模型使用攻略
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
238 0
RabbitMQ安装以及消息模型使用攻略
|
消息中间件
RabbitMQ 实战教程(五) 主题
RabbitMQ 实战教程(五) 主题
124 0
RabbitMQ 实战教程(五) 主题
|
消息中间件 存储 网络协议
|
消息中间件 Java 物联网
[原创]AMQP-RabbitMQ/1/概念/一对一简单模型
[原创]AMQP-RabbitMQ/1/概念/一对一简单模型
[原创]AMQP-RabbitMQ/1/概念/一对一简单模型