有没有办法计算作业重新排队的次数(通过拒绝或 Nak)而无需手动重新排队作业?我需要重试工作“n”次,然后在“n”次后放弃。ps:目前我手动重新排队作业(如果计数器不存在或值小于“n”,则删除旧作业,创建具有确切内容和额外计数器标头的新作业)
2 回答
拉丁的传说
TA贡献1789条经验 获得超8个赞
有redelivered
消息属性,该属性设置为true时消息重新发送一个或更多的时间。
如果您想跟踪重新传递计数或左重新传递数(又名跳数限制或 IP 堆栈中的 ttl),您必须将该值存储在消息正文或标题中(字面意思是 - 消费消息,修改它,然后将修改后的消息发布回代理)。
隔江千里
TA贡献1906条经验 获得超10个赞
在消息实际上是死信的情况下,您可以检查x-death
消息头的内容。
例如,当您reject
/ nack
withrequeue = false
并且队列具有关联的死信交换时就是这种情况。
在这种情况下,此标头的内容是一个数组。每个元素描述一次失败的交付尝试,包含尝试交付的时间、路由信息等信息。
这适用于 RabbitMQ - 我不知道它是否适用于一般的 AMQP。
编辑
自从我最初写这个答案以来,x-death
标题结构已更改。
标头更改格式通常是一件非常糟糕的事情,但在这种特殊情况下,原因是如果消息连续死信,消息大小将无限增长。
因此,我删除了用于获取消息死亡人数的代码段。
仍然可以从新的标题格式中获得死亡人数。
- 2 回答
- 0 关注
- 325 浏览
添加回答
举报
0/150
提交
取消