【发布时间】:2012-01-02 15:17:46
【问题描述】:
现在我正在使用具有重新传递策略的 JMS 队列,这样回滚超过五次的消息将被发送到死信队列。
当消息被发送到 ActiveMQ 中的死信队列时,有没有办法查看是什么异常导致了该消息回滚?是否有我可以设置的消息属性来指定导致消息失败的原因?
【问题讨论】:
标签: activemq apache-camel
现在我正在使用具有重新传递策略的 JMS 队列,这样回滚超过五次的消息将被发送到死信队列。
当消息被发送到 ActiveMQ 中的死信队列时,有没有办法查看是什么异常导致了该消息回滚?是否有我可以设置的消息属性来指定导致消息失败的原因?
【问题讨论】:
标签: activemq apache-camel
您需要查看生成异常的盒子上的日志。发送到 DLQ 的内容实际上只是无法传递的消息。
【讨论】:
如果您使用死信通道功能 http://activemq.apache.org/message-redelivery-and-dlq-handling.html 的 AMQ 代理然后它如上面所回答的那样,实际上只是无法传递的消息。代理不知道出了什么问题,它只是在消息上收到一个“回滚”信号。
如果您使用 Camel 的死信通道功能 http://camel.apache.org/dead-letter-channel.html 然后 Camel 将导致的异常作为属性存储在 Exchange 上,您可以丰富失败的消息,并将其发送到 AMQ 代理中的死信队列。因此,不是让 AMQ 回滚消息,而是处理异常,并将消息发送到另一个队列,该队列恰好是死信队列。然后,您可以通过从 Exchange 属性获取堆栈跟踪和/或异常消息来丰富消息,并将其存储在消息的某个位置、标题等中。
Camel 将捕获的异常存储为 Exchange 上的属性,其键为:Exchange.EXCEPTION_CAUGHT
【讨论】: