根据某些条件调用嵌套链

时间:2015-10-06 13:13:06

标签: spring-integration

<int:chain input-channel="chainB">
    <int:gateway request-channel="chainC" error-channel="errChannel"/>
</int:chain>

<int:chain input-channel="chainC">
     .....
    <int:gateway request-channel="chainD"/>
    .....
`   <int:gateway request-channel="chainE"/>
</int:chain>

<int:chain input-channel="errChannel">
     ......
     <int:gateway request-channel="chainF"/>//this line is conditional
     <service-activator ......     />this line has to be executed everytime
     ......
</int:chain>

1)如果chainD失败,我不必执行chainE。这很好。

2)在chainD中设置了一些标题“Release”。我想仅在chainD能够成功设置该标题时才调用chainF。

添加更多信息 -

  1. ChainD设置标题'Release'
  2. ChainE在chainD之后执行。我设置了一些标题'ChainERequest'。
  3. 现在我有3个schenarios -

    1. D链是成功的,E链是成功的
    2. 链D失败,链E不会被调用。因此,'Release'可能为null或not-null,具体取决于哪个line chainD失败。
    3. 连锁D成功,连锁E失败。 Release不为null,ChainERequest不为null。
    4. 错误流逻辑如下 -

      1. 致电变压器A
      2. 致电变压器B
      3. 如果ChainERequest == null&amp;&amp;释放!= null,然后调用chainF。返回
      4. 呼叫变压器C
      5. 我如何编写第3步?

1 个答案:

答案 0 :(得分:1)

您可以检查failedMessage的有效负载上的ErrorMessage属性。

如果流量在ChainD之后失败,它将具有标题,如果之前失败,则不会。

<int:filter expression="payload.failedMessage.headers['Release'] != null" />