【原创】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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
消息中间件 Java 物联网
[原创]AMQP-RabbitMQ/1/概念/一对一简单模型
[原创]AMQP-RabbitMQ/1/概念/一对一简单模型
[原创]AMQP-RabbitMQ/1/概念/一对一简单模型
|
消息中间件 缓存 网络安全