Mule中Subflow和Processor-Chain有什么区别?
据我所知,两者都可以重复使用。两者都使配置更具可读性。两者都是同步执行的。两者都从触发流程继承了处理策略和异常策略。
可以在流内部定义处理器链以及全局消息处理器。
除此之外,它们在行为和使用方面有何不同。
更新: 配置命名处理器链的示例配置
<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>
答案 0 :(得分:4)
processor-chain
是为了解决某些消息处理器不允许多个嵌套处理器的问题。
sub-flow
背后的想法是一系列消息处理器的宏扩展。如果你使用最新的Mule版本,你不应该使用处理器链,除了一些非常古老的结构。使用子流程可以让您拥有更易读的代码,例如,包含重复的内容。