Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mule聚合器-流式聚合_Java_Soa_Messaging_Mule - Fatal编程技术网

Java Mule聚合器-流式聚合

Java Mule聚合器-流式聚合,java,soa,messaging,mule,Java,Soa,Messaging,Mule,Mule 2.0框架中使用的集合聚合器的工作原理如下: 入站路由器接收一组消息并将其拆分为多个较小的消息-每个较小的消息都会加盖与父消息对应的关联id 这些消息流经各种服务 最后,这些消息到达一个入站聚合器,该聚合器根据父消息的相关id和预期消息的数量收集消息。收到所有预期消息后,将调用聚合函数并返回结果 现在,当一个组中的消息数量相当少时,这种方法可以正常工作。然而,一旦组中的消息数量变大(约100k),则会占用大量内存来保存该组消息,等待稍后的消息到达。如果同时聚合多个组,则情况会更糟

Mule 2.0框架中使用的集合聚合器的工作原理如下:

  • 入站路由器接收一组消息并将其拆分为多个较小的消息-每个较小的消息都会加盖与父消息对应的关联id

  • 这些消息流经各种服务

  • 最后,这些消息到达一个入站聚合器,该聚合器根据父消息的相关id和预期消息的数量收集消息。收到所有预期消息后,将调用聚合函数并返回结果

现在,当一个组中的消息数量相当少时,这种方法可以正常工作。然而,一旦组中的消息数量变大(约100k),则会占用大量内存来保存该组消息,等待稍后的消息到达。如果同时聚合多个组,则情况会更糟

解决这个问题的一种方法是实现流式聚合器。在我的用例中,我基本上是基于一个键总结各种消息,这可以在不必同时查看组中的所有消息的情况下完成。我只想知道,在将结果转发到端点之前,所有消息都已收到

这听起来是解决问题的合理办法吗

这已经在Mule的某个地方实现了吗


有更好的方法吗

这似乎是一种合理的方法(我无论如何都不是Mule专家),我已经阅读了所有的Mule文档,不认为有类似的东西存在(流式传输支持仅限于一些连接器和转换器-非常简单,它只传递一个InputStream)。Mule流中只有一些东西,所以您可能需要在该流中使用其他经过修改的转换器(如果您使用它们)。您只需实现聚合器,它提供一个InputStream,并在获得连续的消息序列后立即开始流式处理

但是,您描述中的一句话“……所有消息在将结果转发到端点之前都已收到”可能会令人不安。这本质上违背了流式传输的目的,除非您的意思是(在您的服务组件中)在转发(可能更小)的处理结果之前,您将跟踪您获得的一切