RabbitMQ:如何使用计数器重新排队消息

有没有办法计算作业重新排队的次数(通过拒绝或 Nak)而无需手动重新排队作业?我需要重试工作“n”次,然后在“n”次后放弃。

ps:目前我手动重新排队作业(如果计数器不存在或值小于“n”,则删除旧作业,创建具有确切内容和额外计数器标头的新作业)


qq_遁去的一_1
浏览 326回答 2
2回答

拉丁的传说

有redelivered消息属性,该属性设置为true时消息重新发送一个或更多的时间。如果您想跟踪重新传递计数或左重新传递数(又名跳数限制或 IP 堆栈中的 ttl),您必须将该值存储在消息正文或标题中(字面意思是 - 消费消息,修改它,然后将修改后的消息发布回代理)。

隔江千里

在消息实际上是死信的情况下,您可以检查x-death消息头的内容。例如,当您reject/ nackwithrequeue = false并且队列具有关联的死信交换时就是这种情况。在这种情况下,此标头的内容是一个数组。每个元素描述一次失败的交付尝试,包含尝试交付的时间、路由信息等信息。这适用于 RabbitMQ - 我不知道它是否适用于一般的 AMQP。编辑自从我最初写这个答案以来,x-death标题结构已更改。标头更改格式通常是一件非常糟糕的事情,但在这种特殊情况下,原因是如果消息连续死信,消息大小将无限增长。因此,我删除了用于获取消息死亡人数的代码段。仍然可以从新的标题格式中获得死亡人数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go