我正在尝试使用Mule 3.2.0的Collection Aggregator。我尝试使用Mule Studio,但似乎它仍未在Mule工作室中进行配置,尽管图标确实出现在" Flow Control"部分。 我的用例是 - 我从VM入站端点收到消息。我现在想将它传递给3个不同的流 - 所有流都使用相同的请求对象但执行不同的操作 - 比如A,B,C。所有这些都更新了它们各自的数据库,但它们都是常见的Order_ID(我们的应用程序内部的somethig)的一部分。这三个过程可能需要不同的处理时间,但一旦完成,每个过程都会返回相同的成功响应。我想使用聚合器,它将聚合所有这些响应而不会超时,然后将其转发到Java组件或另一个VM端点以进行进一步处理。 Collection Aggregator的Mule文档似乎并不是非常有用,所以如果使用Collection Agg的某人可以帮助我使用上述场景的xml配置,那将非常有帮助
答案 0 :(得分:4)
而不是Collection Aggregator
使用All
消息处理器。它向内部的每个处理器发送相同的消息,并在结束后聚合结果。
示例配置:(我将“foo”发送到vm端点)
<flow name="main" processingStrategy="asynchronous">
<vm:inbound-endpoint path="in"/>
<all>
<flow-ref name="flow1"/>
<flow-ref name="flow2"/>
</all>
<logger message="#[payload:]" level="INFO"/>
</flow>
<flow name="flow1">
<append-string-transformer message="bar1"/>
</flow>
<flow name="flow2">
<append-string-transformer message="bar2"/>
</flow>
控制台输出:
INFO 2012-08-15 17:26:01,749 [main.stage1.02] org.mule.api.processor.LoggerMessageProcessor: [foobar1, foobar2]
HTH
答案 1 :(得分:0)
我会使用ALL组件,你使用的端点应该是请求 - 响应(流程等待响应的双向)。
因此ALL组件将聚合响应,然后返回一个CopyOnWriteArrayList,其中包含来自流A,B和C的所有响应。通过在Java中扩展AbstractTransformer,您可以使用自定义转换器以任何所需方式转换此Array列表类。
干杯, Naveen Raj