如何在发布到 dlq 之前向 amqp 消息添加标头?

问题描述 投票:0回答:1

我正在使用 spring-amqp 和死信队列来处理失败的消息,但我想增加每次重试的 ttl(如指数退避)。

我尝试在自定义错误处理程序中获取消息并添加过期标头,以便兔子可以使用此值而不是 ttl,但自定义标头未发布。

可以这样做吗? 我见过 RejectAndDontRequeueRecoverer 但我不确定这是否是最好的方法,甚至它是否可能。

spring-amqp
1个回答
0
投票

RejectAndDontRequeueRecoverer
会抛出
AmqpRejectAndDontRequeueException
,最终的逻辑如下:

this.channel.basicNack(deliveryTag.getAsLong(), true,
                            ContainerUtils.shouldRequeue(this.defaultRequeueRejected, ex, logger));

因此,该过程中不涉及任何消息,只有其

deliveryTag
,这使得代理执行其DLX功能。

对于消息修改,您可能需要查看手动解决方案:

  • nack
    当前消息;
  • 创建一个具有所需标头的新标头并发送到 DLX 以便过期。
© www.soinside.com 2019 - 2024. All rights reserved.