【问题标题】:Preservation of exception cause when redelivering failed activemq jms messages processed by Mule ESB重新传递 Mule ESB 处理的失败的 activemq jms 消息时保留异常原因
【发布时间】:2011-07-01 11:34:06
【问题描述】:

我已经构建了几个使用来自 jms 队列 (ActiveMQ) 的消息的 Mule 进程。每当 Mule 组件抛出异常时,使用消息的事务就会回滚,并且消息会重新传递到原始队列。几次尝试后,它将被发送到死信队列(DLQ.queuName)。

我们的工作正常,但我们错过了抛出的异常,无论是第一个还是最后一个,我们不在乎(它可能是相同的)。这可以在其他代理(如 WebLogic JMS)上完成,但我一直在努力解决这个问题,但无济于事。

有人知道这是否可以配置,或者我是否需要为 ActiveMQ 构建特定的 Mule 异常处理程序或策略。

TIA, 马丁

【问题讨论】:

    标签: exception jms activemq mule


    【解决方案1】:

    该异常目前在 ActiveMQ 中丢失(不了解 Mule),但将其作为错误报告到日志中。 这将是一个很好的增强,记住 ActiveMQConsumer 中异常的字符串形式,并将其传递回带有毒 Ack 的代理,强制它去 DLQ。以这种方式,它可以在生成的 DLQ 消息中作为消息属性被记住。 您希望如何处理异常,将其报告给连接异常侦听器还是将其记录在 DLQ 消息中?

    【讨论】:

    • 嗨,我想将其保留为 DLQ 消息的自定义标头/属性。在将消息发送到 DLQ 之前,我可以实现一些策略接口来处理消息吗?
    • 使用代理插件,您可以实现 org.apache.activemq.broker.Broker#sendToDeadLetterQueue 并进行一些修改。有一个丢弃消息的现有变体,因为源链接在参考页面的底部。见:activemq.apache.org/…
    • 我会试试的。那么在回滚 tx 时,对消息(基本上是新属性)的更改不会丢失吗?我是否需要将交易存储在某个地方以便稍后在此处获取,或者它在某处可用?非常感谢。我以前看过这个插件,但我认为可能会有更简单的东西。
    • 已经实现了这个特性,异常现在被捕获在DLQ消息的一个消息属性中,这将在即将发布的ActiveMQ 5.5中。详情在issues.apache.org/jira/browse/AMQ-3236
    猜你喜欢
    • 2014-02-02
    • 1970-01-01
    • 2013-06-22
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2014-04-27
    相关资源
    最近更新 更多