这篇文章翻译自:http://www.rabbitmq.com/nack.html
消费者在AMQP 0-9-1中可以选择对投递使用手动ACK。
AMQP 0-9-1规范定义了basic.reject方法,使客户端可以拒绝单个已投递的消息,以及指示代理移除他们或者重新入队列。不幸的是,basic.reject没有提供对大批量消息否定应答的支持。
为了解决这个问题,RabbitMQ支持basic.nack方法,除了提供basic.reject的所有功能,还支持大批量消息的处理。
为了以批量方式拒绝消息,客户端设置basic.nack方法的多个标识为true。然后代理将拒绝所有未确认已投递的消息,直至并包括basic.nack方法中delivery_tag字段指定的消息。在这个方面,basic.nack完成了basic.ack的批量ACK语义。
这个例子拒绝单个消息,并请求代理将它重新入队列:
GetResponse gr = channel.basicGet("some.queue", false); channel.basicNack(gr.getEnvelope().getDeliveryTag(), false, true);
这个例子调用代理一次同时拒绝两条消息(basicNack的第二个参数表示多条的意思):
GetResponse gr1 = channel.basicGet("some.queue", false); GetResponse gr2 = channel.basicGet("some.queue", false); channel.basicNack(gr2.getEnvelope().getDeliveryTag(), true, true);
当消息重新入队,如果可能,它将被放在队列的原始位置。如果不行(当多个消费者共享同一队列时,由于并发投递和来自其它消费者的ACK),消息将被重新加入队列中靠近队列头的位置。
发表评论
相关文章
国内AI资源汇总,AI聊天、AI绘画、AI写作、AI视频、AI设计、AI编程、AI音乐等,国内顺畅访问,无需科学上网。
扫码或点击进入:萤火AI大全
文章分类
最新评论