我正在使用 spring-amqp 和死信队列来处理失败的消息,但我想增加每次重试的 ttl(如指数退避)。
我尝试在自定义错误处理程序中获取消息并添加过期标头,以便兔子可以使用此值而不是 ttl,但自定义标头未发布。
可以这样做吗? 我见过 RejectAndDontRequeueRecoverer 但我不确定这是否是最好的方法,甚至它是否可能。
RejectAndDontRequeueRecoverer
会抛出 AmqpRejectAndDontRequeueException
,最终的逻辑如下:
this.channel.basicNack(deliveryTag.getAsLong(), true,
ContainerUtils.shouldRequeue(this.defaultRequeueRejected, ex, logger));
因此,该过程中不涉及任何消息,只有其
deliveryTag
,这使得代理执行其DLX功能。
对于消息修改,您可能需要查看手动解决方案:
nack
当前消息;