如何在兔子消息死信时指定附加信息

How to specify additional info on a rabbit message when it's dead lettered

我有一只兔子 queue 有消息要消费。我还有一个可能会失败的侦听器。 queue 配置了死信交换(以及死信 queue)。我想要的是在死信 queue.

中的消息中看到异常信息

目前的运作方式如下:

  1. 我向正常 queue 发送了一条损坏的消息。
  2. 我的侦听器(我正在使用 Java 的 org.springframework.amqp.core.MessageListener)失败并显示类似以下内容:"java.lang.RuntimeException: corrupted message"
  3. 消息被拒绝并通过死信交换转到死信queue。
  4. 当我查看 Rabbit Admin UI 中的 dead-lettered 消息时,我看到: headers:
    x-death:
    原因:拒绝

但我想要的是在 UI 的某处看到 "java.lang.RuntimeException: corrupted message"。我认为它应该是自定义 header?

是否有可能,例如,将一般 try-catch 放入我的侦听器并使用异常信息增强 header?

没有; RabbitMQ(实际上是 AMQP 规范)没有为消费者提供使用附加信息增强被拒绝消息的机制。该协议只支持确认或拒绝消息。

Spring AMQP 与重试拦截器一起提供了一种机制,可以将消息重新发布到不同的 queue(可以与 DLQ 相同),并在 headers(异常堆栈跟踪等)。

参见RepublishMessageRecoverer in the section about error handling with asynchronous consumers