2011-11-21 32 views
0

现在,我正在使用具有重新传递策略的JMS队列,以便将回滚超过五次的邮件发送到死信队列。在DLQ消息中检查客户端异常

当消息发送到ActiveMQ中的死信队列时,是否有办法查看导致该消息回滚的异常?是否有可以设置的消息属性来指定导致消息失败的原因?

回答

0

您需要查看生成异常的框中的日志。发送给DLQ的信息实际上只是无法传递的信息。

+0

是的,如果它的AMQ代理执行将消息移动到DLQ,那么代理不知道客户端上发生的任何栈跟踪等。 –

4

如果您使用AMQ代理的死信通道功能 http://activemq.apache.org/message-redelivery-and-dlq-handling.html 那么它的回答如上,字面上只是无法传递的消息。经纪人没有任何知道哪里出了问题,它只是收到了信息的'回滚'信号。

如果使用骆驼的死信通道功能 http://camel.apache.org/dead-letter-channel.html 然后骆驼存储引起的异常,因为在交易所,它可以丰富对失败的消息,并将其发送到死信队列的属性,在AMQ经纪人。因此,不要让AMQ回滚消息,而是处理该异常,并将消息发送到另一个队列,这恰好是一个死信队列。然后,您可以通过从Exchange属性中获取堆栈跟踪和/或异常消息并将其存储在邮件的某处,以便在邮件头等内容中丰富邮件。

Camel将捕获到的异常作为Exchange的属性存储在关键字中: Exchange.EXCEPTION_CUUGHT

+1

哦,并且还有一个选项名为:useOriginalMessage如果使用骆驼死信通道功能,可能希望在骆驼网站上查看它的功能。 –