2012-08-14 71 views
0

我想使用骡3.2.0 s收集聚合器。我尝试过使用Mule Studio,但似乎仍然没有在Mule studio中进行配置,虽然图标确实出现在“流量控制”部分。 我的用例是 - 我从VM入站端点收到消息。我现在想把它传递给3个不同的流程 - 全部使用相同的请求对象,但执行不同的操作 - 说A,B,C。他们都更新了各自的数据库,但它们都是共同的Order_ID(我们应用程序内部的一些)。 3个进程可能需要不同的处理时间,但一旦完成,每个进程都会返回相同的成功响应。我想要使​​用一个聚合器,它将聚合所有这些响应而不超时,然后将其转发给Java组件或另一个VM端点以供进一步处理。 用于收集聚集骡子的文档似乎并不十分翔实,所以如果有一个人谁使用收藏此Agg能帮助我的XML配置对于上述方案,将是非常有益的骡收集聚合器

回答

4

代替Collection Aggregator使用All消息处理器。它会将相同的消息发送给它内部的每个处理器,并在完成后汇总结果。

http://www.mulesoft.org/documentation/display/MULE3USER/Routing+Message+Processors#RoutingMessageProcessors-All

样本配置:(我送 “福” 到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

+0

谢谢丹尼尔。我想你是指上述链接中的这一位 - “目标返回的所有消息(如果有的话)都聚合在一起并形成来自该处理器的响应。”然而,这并没有真正以这种方式与ALL合作。我现在实际上正在使用ALL,它只是将消息转发给所有人,并在他们各自的流程结束时消亡。如果我在ALL之后添加了另一个Java组件,只要消息已经传递到3个ALL目标,并且不真正等待来自3的响应,那么您是否有示例配置?谢谢 – Soumya 2012-08-15 11:05:50

+0

这可能是因为你从ALL调用A,B和C流程的方式是异步的(即“单向”)。 – 2012-08-15 15:25:45

+0

用示例配置更新了我的答案,它工作正常。你能提供你的流程配置的更多细节吗? – Daniel 2012-08-15 20:35:47

0

我会去到使用ALL组件,您使用的端点应该是请求 - 响应(双向的流量等待响应)。

因此ALL组件将聚集反应的然后返回你与来自流A,B和C这阵列列表中,可以以任何期望的方式使用定制变压器通过在延伸AbstractTransformer变换所有的响应的的CopyOnWriteArrayList您的java类。

Cheers, Naveen Raj