2014-09-29 36 views
2

Mule中的Subflow和处理器链有什么区别?Mule Subflow vs处理器链

据我所用,两者都是可重复使用的。两者都使配置更具可读性。两者都同步执行。两者都从触发流程中继承处理策略和异常策略。

处理器链可以在流内部定义,也可以在全局消息处理器中定义。

除此之外,它们在行为和用法上有何不同。

更新: 实施例的配置具有命名处理器链

<flow name="man-flow" > 
     <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="myapp/collection-processor" doc:name="HTTP"> 
      <byte-array-to-string-transformer></byte-array-to-string-transformer> 
     </http:inbound-endpoint> 
     <expression-component doc:name="Expression"><![CDATA[java.util.ArrayList list = new java.util.ArrayList(); 
      list.add("First String"); 
      list.add("Second String"); 
      list.add("Third String"); 
      payload = list;]]>   
     </expression-component> 
     <request-reply> 
      <vm:outbound-endpoint path="split"/> 
      <vm:inbound-endpoint path="processed"/> 
     </request-reply> 
     <set-payload value="#[payload.toString()]"/> 
    </flow> 

    <processor-chain name="sample-processor-chain"> 
     <append-string-transformer message=" in splitter" /> 
     <append-string-transformer message=" in processor-chain" /> 
    </processor-chain> 

    <flow name="splitter-flow"> 
     <vm:inbound-endpoint path="split"/> 
     <collection-splitter enableCorrelation="IF_NOT_SET"/> 
     <processor ref="sample-processor-chain"></processor> 
     <vm:outbound-endpoint path="aggregate"/>  
    </flow> 

    <flow name="aggregator-flow"> 
     <vm:inbound-endpoint path="aggregate"/> 
     <collection-aggregator timeout="30000"/>   
     <vm:outbound-endpoint path="processed"/> 
    </flow> 

回答

3

processor-chain成立是为了解决不允许多于一个嵌套处理器一些消息处理器的问题。 sub-flow背后的想法是一系列消息处理器的宏观扩展。如果你使用最新的Mule版本,你不应该使用处理器链,除非一些非常旧的结构。使用子流程可让您拥有更易读的代码,例如包含重复的内容。