Exception handling mule中的选择、回滚、捕获异常策略

Exception handling mule中的选择、回滚、捕获异常策略,exception-handling,mule,rollback,choice,Exception Handling,Mule,Rollback,Choice,我需要从一个队列中获取数据,并需要将数据放在另一个队列中 异常处理策略:若目标队列已关闭,则需要在源队列中放置数据。如果目标队列已启动,并且其间出现任何错误,则需要写入其他队列(以避免丢失消息)。为了实现这一点,我使用了选择、回滚和捕获异常策略 在回滚的when条件中:#[exception.causedBy(java.net.UnknownHostException)| exception.causedBy(java.net.ConnectException)| exception.cause

我需要从一个队列中获取数据,并需要将数据放在另一个队列中

异常处理策略:若目标队列已关闭,则需要在源队列中放置数据。如果目标队列已启动,并且其间出现任何错误,则需要写入其他队列(以避免丢失消息)。为了实现这一点,我使用了选择、回滚和捕获异常策略

在回滚的when条件中:#[exception.causedBy(java.net.UnknownHostException)| exception.causedBy(java.net.ConnectException)| exception.causedBy(org.mule.transport.jms.redelivery.MessageRedeliveredException)]

若除此之外发生,则转到catch:当条件为空时,我将离开,但问题是,若错误直接发生,则控制台将转到catch而不是执行回滚。我失去了消息来源


请就此向我提出建议。提前感谢。

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

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

.....
因此,在catch-estategy中或任何地方,您都可以根据您的范围获得这个变量“initialJmsPayload”:会话、应用程序、出站等

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

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
}
org.mule.DefaultMuleMessage
{
id=36927f80-66c1-11e5-af11-34e6d74f92e6
有效负载=com.mycompany.Object
相关ID=
correlationGroup=-1
correlationSeq=-1
编码=UTF-8
例外有效载荷=
消息属性:
调用范围的属性:
入站作用域属性:
....
MULE_MESSAGE_ID=ID:A25MD001-57147-1443541361491-11:1:1:1:1
...
出站作用域属性:
MULE_编码=UTF-8
会话作用域属性:
myVar=java.lang.String
}