rabbitmq 如何将消息放在MQRabbit队列的末尾

rkkpypqq  于 4个月前  发布在  RabbitMQ
关注(0)|答案(2)|浏览(120)

我正在开发一个工人,它能够处理来自RabbitMQ的消息。
然而,我不确定如何做到这一点。
如果我收到一条消息,在我处理过程中发生了一个错误,我如何将消息放入队列的末尾?
我试图使用nack或reject,但消息总是重新放在第一个位置,其他消息保持冻结!
我不明白为什么消息必须放在第一位,我试图“玩”与其他选项,如requeue或allupTo,但他们似乎都没有工作。
在此先谢谢您!

nr7wwzry

nr7wwzry1#

Documentation说:
可以使用具有重新排队参数的AMQP方法将消息返回到队列(basic.recover、basic.reject和basic.nack),或者由于通道关闭而持有未确认的消息。对于早于2.7.0的RabbitMQ版本,这些情况中的任何一种都会导致消息在队列的后面重新排队。从RabbitMQ版本2.7.0开始,消息总是按发布顺序保存在队列中,即使在重新排队或信道关闭的情况下也是如此。
在2.7.0版及更高版本中,如果队列有多个订阅者,则单个消费者仍有可能观察到消息乱序。这是由于可能重新排队消息的其他订阅者的操作。从队列的Angular 来看,消息始终按发布顺序保存。
请记住ack您的成功消息,否则它们将不会从队列中删除。
如果你需要更多的控制你的拒绝邮件,你应该看看dead letter exchanges

bwleehnv

bwleehnv2#

RabbitMQ总是试图保持消息的发布顺序。
如果你想把从消费者那里收到的消息放在队列的后面,那么,把ack()发送回rabbitmq服务器,RabbitMQ将删除它正在等待的现有消息的确认。把消息数据发送到同一个队列,它将被放在队列的后面。

相关问题