我正在开发一个能够处理来自 RabbitMQ 的消息的工作程序。
但是,我不确定如何实现这一点。
如果我收到一条消息,并且在处理过程中发生错误,如何将消息放入队列末尾?
我尝试使用nack或reject,但消息总是被重新放在第一个位置,而其他消息保持冻结状态!
我不明白为什么消息必须放在第一个位置,我试图“玩”其他选项,如 requeue 或 AllupTo,但它们似乎都不起作用。
提前谢谢您!
文档说:
可以使用具有重新排队参数(basic.recover、basic.reject 和 basic.nack),或者由于通道关闭而未确认 消息。任何这些情况都会导致消息在 对于 2.7.0 之前的 RabbitMQ 版本,排在队列后面。从 RabbitMQ 版本 2.7.0,消息始终保存在队列中 发布顺序,即使存在重新排队或通道 关闭。
在 2.7.0 及更高版本中,个人仍然可以 如果队列有多个,消费者观察无序的消息 订户。这是由于其他订阅者的行为造成的,他们可能 重新排队消息。从队列的角度来看,消息是 始终按出版顺序排列。
记得
ack
您成功的消息,否则它们不会从队列中删除。
如果您需要更多地控制被拒绝的消息,您应该查看死信交换。
RabbitMQ 始终尝试保持消息的发布顺序。
如果你想把从消费者那里收到的消息放在队列的后面, 将ack()发送回rabbitmq服务器,RabbitMQ将删除正在等待确认的现有消息。将消息数据发送到同一个队列,它将被放入队列的后面。