Mule Collection聚合器

时间:2012-08-14 14:36:47

标签: esb mule

我正在尝试使用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配置,那将非常有帮助

2 个答案:

答案 0 :(得分:4)

而不是Collection Aggregator使用All消息处理器。它向内部的每个处理器发送相同的消息,并在结束后聚合结果。

http://www.mulesoft.org/documentation/display/MULE3USER/Routing+Message+Processors#RoutingMessageProcessors-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