Web Services 在Mule中聚合来自流的消息< all>

2ekbmq32  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(122)

"到目前为止的故事"
我有一个SOAP服务,它向一个流发送它的响应(比如Response_A)。在流中,有三个SOAP服务(比如B、C和D),它们从Response_A中获取输入。我从Response_A中获取字段,并使用XSLT,我可以为B、C和D制定请求。
快速提问:我在里面使用块来并行处理消息。当在里面使用和标记时,处理不是并行的。知道为什么吗?

路线图

我将读取来自所有三个B、C和D的响应,并将它们组合成一个响应(可能再次使用XSLT),然后将其发送到E。
"路障"
从流中出来后,我得到一个MuleMessageCollection,如何读取它,并将消息组合成单个消息?

我的尝试

我尝试基于相关性ID聚合消息,但我注意到只有当来自A的消息被标记拆分并发送到B、C和D时,相关性ID才会出现。即使我将 enableMuleSoapHeaders 设置为true,相关性ID也会在作为这些服务的响应的SOAP信封中消失。我无法修改这些服务。因此,如何使相关性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标记。

bsxbgnwa

bsxbgnwa1#

当在其中使用和标记时,处理不是并行的。知道为什么吗?
这是因为 allprocessor-chain 本质上是同步的:它们不会并行化任何东西。
现在来看看聚合远程异步响应的问题,如果远程服务没有反射回Mule头(这是绝大多数非Mule支持的服务的情况),您需要确定是否可以使用响应有效负载中的一个值,该值将从远程服务反射回来(可以是SOAP头或SOAP主体中的字段,如ID)。如果是这种情况,您可以使用 expression-message-info-mapping 配置 collection-aggregator,该 expression-message-info-mapping 指定将不使用Mule头而是使用另一个源来完成关联。
否则,您宁愿保留 all 块,一个接一个地进行调用...

相关问题