选择,回滚,捕捉骡子的例外策略

时间:2015-09-29 12:20:16

标签: exception-handling mule rollback choice

我需要从一个队列中获取数据,并且需要将数据放在其他队列中。

异常处理策略:如果目标队列已关闭,则需要将数据放入源队列中。如果目标队列已启动且中间出现任何问题,则需要写入其他队列(不要松开消息)。为实现这一点,我使用了选择,回滚和捕获异常策略。

回滚时的

条件:#[exception.causedBy(java.net.UnknownHostException)|| exception.causedBy(java.net.ConnectException)|| exception.causedBy(org.mule.transport.jms。 redelivery.MessageRedeliveredException)]

如果除此之外发生了捕获:我在条件为空时离开但问题是如果错误发生直接控制台来捕获不执行回滚。而且我从源头上丢失了这条消息。

请在此建议我..,提前谢谢..,

1 个答案:

答案 0 :(得分:0)

解决方案可以是在流程开始时保存初始有效负载(jms消息):

<flow name="flow.jms.in">
        <jms:inbound-endpoint queue="queue.in"/>
        <set-variable variableName="initialJmsPayload" value="#[payload]"/>
        .....
</flow>

所以在你的捕捉策略或任何地方,你都可以得到这个var&#34; initialJmsPayload&#34;取决于您的范围:会话,应用程序,出站等

在您的捕获策略中,您可以在orider中打印#[message]以查看消息中的所有变量:

org.mule.DefaultMuleMessage
{
  id=36927f80-66c1-11e5-af11-34e6d74f92e6
  payload=com.mycompany.Object
  correlationId=<not set>
  correlationGroup=-1
  correlationSeq=-1
  encoding=UTF-8
  exceptionPayload=<not set>

Message properties:
  INVOCATION scoped properties:
  INBOUND scoped properties:
    ....
    MULE_MESSAGE_ID=ID:A25MD001-57147-1443541361491-11:1:1:1:1
    ...
    OUTBOUND scoped properties:
    MULE_ENCODING=UTF-8
  SESSION scoped properties:
    myVar=java.lang.String
}