5

我有一个兔子队列,里面有消费消息。我也有一个可能会失败的听众。该队列配置有死信交换(连同死信队列)。我想要的是在死信队列中的消息中查看异常信息。

以下是它目前的工作方式:

  1. 我将损坏的消息发送到我的正常队列。
  2. 我的监听器(我正在使用 Java 的 org.springframework.amqp.core.MessageListener)失败并出现类似:“java.lang.RuntimeException:消息损坏”
  3. 消息被拒绝并通过死信交换进入死信队列。
  4. 当我在 Rabbit Admin UI 中查看死信消息时,我看到: headers:
    x-death:
    reason: denied

但我想要的是在 UI 的某处看到“java.lang.RuntimeException:损坏的消息”。我认为它应该是一个自定义标题?

例如,是否可以为我的侦听器放置一个通用的 try-catch 并使用异常信息增强标头?

4

1 回答 1

7

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

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

请参阅RepublishMessageRecoverer有关使用异步消费者进行错误处理的部分

于 2015-11-19T17:52:00.163 回答