重新传递 Mule ESB 处理的失败的 activemq jms 消息时保留异常原因

Posted

技术标签:

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

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

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

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

TIA, 马丁

【问题讨论】:

【参考方案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

以上是关于重新传递 Mule ESB 处理的失败的 activemq jms 消息时保留异常原因的主要内容,如果未能解决你的问题,请参考以下文章

Mule ESB:无法使用流有效负载复制消息

EnjoyingSoft之Mule ESB基础系列第二篇:Mule ESB基本概念

使用 Mule 重新排队 JMS 请求

EnjoyingSoft之Mule ESB基础系列第三篇:Mule message structure - Mule message结构

Mule ESB 连接到 RabbitMQ

Mule ESB-3.Build a webservice proxy