【问题标题】:Checking client exceptions in DLQ messages检查 DLQ 消息中的客户端异常
【发布时间】:2012-01-02 15:17:46
【问题描述】:

现在我正在使用具有重新传递策略的 JMS 队列,这样回滚超过五次的消息将被发送到死信队列。

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

【问题讨论】:

    标签: activemq apache-camel


    【解决方案1】:

    您需要查看生成异常的盒子上的日志。发送到 DLQ 的内容实际上只是无法传递的消息。

    【讨论】:

    • 是的,如果它是执行将消息移动到 DLQ 的 AMQ 代理,那么代理不知道客户端上发生的任何堆栈跟踪等。
    【解决方案2】:

    如果您使用死信通道功能 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

    【讨论】:

    • 哦,还有一个名为:useOriginalMessage 的选项,如果使用 Camel 死信通道功能,您可能想在 Camel 网站上用谷歌搜索它的作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    相关资源
    最近更新 更多