重试时更改RabbitMQ消息的标题和正文?

时间:2018-01-29 19:45:44

标签: rabbitmq

我看过博客帖子,以及来自这个SO问题How do I set a number of retry attempts in RabbitMQ?的回答#2,建议一种方法来跟踪RabbitMQ消息的重试次数是用{{1}再次发布它标题。

这是通过在消息上设置标题来完成的,因为它将转向死信交换,或者通过使用与之前相同的标题和正文制作消息的新副本来完成,但加上增加的{{ 1}}(在确认消息的旧副本时?),如果可以用前者完成,如何在消息被删除之前编辑消息的标题或正文?

1 个答案:

答案 0 :(得分:4)

当您在RabbitMQ中执行basic.nack时,您告诉服务器的是该消息无法处理。如果您配置了死信交换/队列,则在设置requeue=false时将在此处路由该消息。您无法更改发布到DLX的邮件内容,因为它们只是发布的原始邮件的反映。

This thread表示他们正在努力让服务器自动报告传递尝试次数,但在当前版本的RabbitMQ中不会发生这种情况。

所以...目前,如果您知道您的代码尝试处理邮件的次数很重要,则有必要:

  1. 拒绝邮件,设置requeue=false
  2. 使用原始交换和路由密钥再次发布邮件,但向标头添加所需的任何信息。从服务器的角度来看,这是一条全新的消息,它将被放置在队列的后面。
  3. 请注意,如果您的消费者在将任何确认(正面或负面)发送回服务器之前断开连接,则消息仍可能会重新排队。在这种情况下,原始邮件将按原样传送(没有自定义标头),并且将设置redelivered标志。