为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
qq_遁去的一_1 2021-08-10 10:41:34
有没有办法计算作业重新排队的次数(通过拒绝或 Nak)而无需手动重新排队作业?我需要重试工作“n”次,然后在“n”次后放弃。ps:目前我手动重新排队作业(如果计数器不存在或值小于“n”,则删除旧作业,创建具有确切内容和额外计数器标头的新作业)
查看完整描述

2 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

redelivered消息属性,该属性设置为true时消息重新发送一个或更多的时间。

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


查看完整回答
反对 回复 2021-08-10
?
隔江千里

TA贡献1906条经验 获得超10个赞

在消息实际上是死信的情况下,您可以检查x-death消息头的内容。

例如,当您rejectnackwithrequeue = false并且队列具有关联的死信交换时就是这种情况。

在这种情况下,此标头的内容是一个数组。每个元素描述一次失败的交付尝试,包含尝试交付的时间、路由信息等信息。

这适用于 RabbitMQ - 我不知道它是否适用于一般的 AMQP。

编辑

自从我最初写这个答案以来,x-death标题结构已更改。

标头更改格式通常是一件非常糟糕的事情,但在这种特殊情况下,原因是如果消息连续死信,消息大小将无限增长。

因此,我删除了用于获取消息死亡人数的代码段。

仍然可以从新的标题格式中获得死亡人数。


查看完整回答
反对 回复 2021-08-10
  • 2 回答
  • 0 关注
  • 325 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信