【问题标题】:Changing the headers and body of a RabbitMQ message when retrying it?重试时更改 RabbitMQ 消息的标头和正文?
【发布时间】:2018-07-08 14:19:59
【问题描述】:

我看过博客文章,以及来自这个 SO 问题 How do I set a number of retry attempts in RabbitMQ? 的回答 #2,建议跟踪 RabbitMQ 消息的重试计数的一种方法是使用 x-redelivered-count 标头再次发布它。

这是通过在消息前往死信交换时设置消息头来完成的,还是通过制作具有与以前相同的头和正文但增加了@987654323 的消息的新副本来完成@(在确认消息的旧副本时?),如果可以用前者完成,我将如何在消息被死信之前编辑消息的标题或正文?

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

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

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

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

    1. 拒绝消息,设置requeue=false
    2. 使用原始交换和路由密钥再次发布消息,但将您需要的任何信息添加到标头。从服务器的角度来看,这是一条全新的消息,它会被放在队列的最后。

    请注意,如果您的消费者在将任何肯定或否定的确认发送回服务器之前断开连接,消息仍可能会重新排队。在这种情况下,原始消息将按原样传递(无自定义标头),并且将设置 redelivered 标志。

    【讨论】:

      猜你喜欢
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-31
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多