有没有办法计算一个工作被重新排队的时间(通过拒绝或Nak)而无需手动重新计算工作?我需要在'n'时间重试一份工作,然后在'n'时间之后放弃它.
ps:目前我手动重新排队作业(删除旧作业,创建具有确切内容的新作业,如果计数器不存在或者值小于'n',则额外的Counter标题)
pin*_*ain 16
还有redelivered那设置为true时消息重新发送一个或多个时间消息属性.
如果要跟踪重新传递计数或保留redelivers数(也就是IP堆栈中的跃点限制或ttl),则必须将该值存储在消息正文或标题中(字面意思 - 消费消息,修改消息然后将其发布修改回代理).
还有类似的问题和答案可能对您有所帮助:如何在RabbitMQ中设置多次重试?
如果邮件实际上是死信,则可以检查x-death邮件标题的内容。
例如,当您reject/ nackwith requeue = false和队列具有关联的死信交换时,就是这种情况。
在这种情况下,此标头的内容是一个数组。每个元素都描述失败的传递尝试,其中包含诸如传递尝试的时间,路由信息等信息。
这适用于RabbitMQ-我不知道它是否通常适用于AMQP。
编辑
自从我最初编写此答案以来,x-death标头结构已更改。
标头更改格式通常是非常不好的事情,但是在这种特殊情况下,原因是如果连续对邮件进行死信,则邮件大小将无限期增长。
因此,我删除了曾经在此处获得消息死亡人数的那段代码。
仍然有可能从新的标头格式中获得死亡人数。