繁体   English   中英

汇总来自 <all> M子流

[英]Aggregate messages from an <all> flow in Mule

到目前为止的故事

我有一个SOAP服务,将其响应(例如Response_A)发送到<all>流。 在该流中,有三个SOAP服务(例如B,C和D)从Response_A获取输入。 我正在从Response_A中获取字段,并使用XSLT,可以为B,C和D制定请求。

快速问题:我在<all>中使用<async>块并行处理消息。 在其中使用<all>和<processor-chain>标记时,处理不是并行的。 有什么想法吗?

路线图

我将读取来自三个B,C和D的响应,并将它们组合为一个响应(可能再次使用XSLT)并将其发送给E。

障碍

从<all>流出来后,我得到了MuleMessageCollection。 如何阅读,并将消息合并为一条消息?

我的尝试

我尝试根据相关性ID汇总消息,但是我注意到只有当A的消息被<all>标记分割并发送到B,C和D时,相关性ID才存在。来自这些服务的响应的SOAP信封,即使我将enableMuleSoapHeaders设置为true。 我无法修改服务。 因此,如何使相关性ID出现在SOAP响应中(如果要合并消息,绝对必须提供相关性ID)

我想,我还需要组大小来聚合消息。

我什至尝试使用消息属性转换器添加相关ID,但这种方式无法正常工作。 我被MessageCollection困住了,即使里面可能有带有关联ID的消息,也不知道如何阅读。

因此,归结为一个问题。 合并MessageCollection中的消息有哪些方法?

我想在xml中完成此操作,而无需在Java中编写自定义转换器。 可能吗? 我应该怎么办?

注意 :来自B,C和D的响应消息具有不同的DOM结构。 我要创建的合并消息与A,B,C和D的所有响应和请求都具有不同的DO。

如果有帮助,我将尝试解决此处所述的类似情况: http : //ricston.com/blog/?p=640唯一的区别是,我正在使用流程和all标记。

在其中使用和标记时,处理不是并行的。 有什么想法吗?

这是因为全部处理器链本质上是同步的:它们不并行化任何东西。

现在,对于汇总远程异步响应的问题,如果远程服务没有反映出Mule标头(绝大多数非Mule支持的服务就是这种情况),则需要确定是否可以使用响应有效负载中的值(将从远程服务反射回去)(可以是SOAP头中的SOAP标头或字段,例如ID)。 在这种情况下,您可以使用表达式-消息-信息-映射来配置收集聚合器 ,该表达式-映射将指定不使用Mule标头而是使用另一个源来进行关联。

否则,您宁愿保留所有块,然后一个接一个地进行通话...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM