首页 文章

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

提问于
浏览
0

The story so far

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

快速提问:我在<all>中使用<async>块来并行处理消息 . 当在其中使用<all>和<processor-chain>标签时,处理并不平行 . 有什么想法吗?

The roadmap

我将读取所有三个B,C和D的响应,并将它们组合成一个响应(可能再次使用XSLT)并将其发送到E.

The roadblock

在退出<all>流程后,我得到了一个MuleMessageCollection . 如何阅读,并将消息组合成一条消息?

My attempts

我尝试根据相关ID聚合消息但我注意到只有当来自A的消息被<all>标记拆分并且被发送到B,C和D时才存在相关ID . 相关ID在SOAP信封作为这些服务的响应,即使我将enableMuleSoapHeaders转为true也是如此 . 我无法修改服务 . 那么,如何让相关ID出现在SOAP响应中(如果我想合并消息,则提供相关ID是绝对必要的)

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

我甚至尝试使用消息属性转换器添加相关ID,但它没有那样工作 . 我被一个MessageCollection困住了,并且不知道如何阅读它,即使其中可能存在具有相关id的消息 .

所以,归结为一个问题 . 从MessageCollection合并消息的方法有哪些?

我想在xml中执行此操作,而无需在Java中编写自定义转换器 . 可能吗?我的方法应该是什么?

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

如果它有帮助,我试图处理类似于此处描述的情况:http://ricston.com/blog/?p=640唯一不同的是,我正在使用flow和all标签 .

1 回答

  • 0

    在其中使用和标记时,处理不平行 . 有什么想法吗?

    这是因为所有和处理器链本质上是同步的:它们不会并行化任何东西 .

    现在针对聚合远程异步响应的问题,如果远程服务没有反映Mule标头(绝大多数非Mule驱动服务的情况),您需要找出是否可以使用响应有效负载内部的值,它将从远程服务(可能是SOAP标头或字段,如SOAP内部的ID)反射回来 . 如果是这种情况,您可以使用expression-message-info-mapping配置collection-aggregator,该映射指定不使用Mule标头而是使用其他源完成关联 .

    否则,你宁愿保留所有块并一个接一个地打电话......

相关问题