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

Rus*_*lan 4 java rabbitmq spring-rabbit spring-amqp rabbitmq-exchange

我有一个兔子队列,上面有要消费的消息。我也有一个失败的听众。队列配置有死信交换(以及死信队列)。我想要的是在死信队列中的消息中看到异常信息。

当前的工作方式如下:

  1. 我将损坏的消息发送到我的普通队列。
  2. 我的侦听器(我正在使用Java的org.springframework.amqp.core.MessageListener)失败,并显示类似以下内容:“ java.lang.RuntimeException:损坏的消息”
  3. 邮件被拒绝,并通过死信交换进入死信队列。
  4. 当我查看Rabbit Admin UI中的死信时,我看到:标头:
    x-death:
    原因:被拒绝

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

例如,是否可以将常规try-catch放入我的侦听器,并使用异常信息增强标头?

Gar*_*ell 6

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

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

请参阅RepublishMessageRecoverer本节中有关使用异步使用者的错误处理的内容

  • 这也是我使用的模式。我喜欢考虑basic.reject和/或无法发送basic.ack,以表明使用者崩溃或有其他与消息或下游任何内容无关的问题。在这种情况下,代理将消息原样重新排队,并允许另一个使用者立即接收它是合适的。如果使用者进程足够健康,可以将明智的信息写入消息头,则可能会将其重新发布到“无法交付”或“重试”的交换中,并且对原始消息进行基本确认。 (3认同)