我看过博客帖子,以及来自这个SO问题How do I set a number of retry attempts in RabbitMQ?的回答#2,建议一种方法来跟踪RabbitMQ消息的重试次数是用{{1}再次发布它标题。
这是通过在消息上设置标题来完成的,因为它将转向死信交换,或者通过使用与之前相同的标题和正文制作消息的新副本来完成,但加上增加的{{ 1}}(在确认消息的旧副本时?),如果可以用前者完成,如何在消息被删除之前编辑消息的标题或正文?
答案 0 :(得分:4)
当您在RabbitMQ中执行basic.nack
时,您告诉服务器的是该消息无法处理。如果您配置了死信交换/队列,则在设置requeue=false
时将在此处路由该消息。您无法更改发布到DLX的邮件内容,因为它们只是发布的原始邮件的反映。
This thread表示他们正在努力让服务器自动报告传递尝试次数,但在当前版本的RabbitMQ中不会发生这种情况。
所以...目前,如果您知道您的代码尝试处理邮件的次数很重要,则有必要:
requeue=false
和请注意,如果您的消费者在将任何确认(正面或负面)发送回服务器之前断开连接,则消息仍可能会重新排队。在这种情况下,原始邮件将按原样传送(没有自定义标头),并且将设置redelivered
标志。