如何在 MQRabbit 队列的末尾放置一条消息

How to put a message at the end of MQRabbit Queue

我正在开发一个能够处理来自 RabbitMQ 的消息的 worker。

但是,我不确定如何完成此操作。

如果我收到一条消息,但在处理过程中发生错误,我该如何将消息放入队列的末尾?

我正在尝试使用 nack 或 reject,但消息总是重新放在第一位,而其他消息保持冻结状态!

我不明白为什么必须将消息放在第一个位置,我正在尝试 "play" 使用其他选项,例如重新排队或 AllupTo,但其中 none 似乎有效.

提前致谢!

Documentation 说:

Messages can be returned to the queue using AMQP methods that feature a requeue parameter (basic.recover, basic.reject and basic.nack), or due to a channel closing while holding unacknowledged messages. Any of these scenarios caused messages to be requeued at the back of the queue for RabbitMQ releases earlier than 2.7.0. From RabbitMQ release 2.7.0, messages are always held in the queue in publication order, even in the presence of requeueing or channel closure.

With release 2.7.0 and later it is still possible for individual consumers to observe messages out of order if the queue has multiple subscribers. This is due to the actions of other subscribers who may requeue messages. From the perspective of the queue the messages are always held in the publication order.

记得 ack 成功的消息,否则它们不会从队列中删除。

如果您需要更好地控制被拒绝的邮件,您应该查看 dead letter exchanges

nack 或 reject 丢弃消息或重新排队消息。

满足您的要求,

一旦消费者收到消息,就在开始处理它之前,将 ack() 发送回 rabbitmq 服务器。

然后处理消息,如果在处理过程中发现任何错误,则将相同的消息发送(发布)到相同的队列中。这会将消息放在队列的后面。

处理成功后什么也不做。 ack() 已经发送到 rabbitmq 服务器。接下一条消息并处理它。