【原创】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 的例子:

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 标识 ):
GetResponse gr1 = channel.basicGet("some.queue", false);
GetResponse gr2 = channel.basicGet("some.queue", false);
channel.basicNack(gr2.getEnvelope().getDeliveryTag(), true, true);







你可能感兴趣的:(rabbitmq)