聚合并行数据处理的结果

时间:2013-03-18 04:10:31

标签: parallel-processing apache-camel jms activemq apache-servicemix

我想使用ServiceMix / ActiveMQ / Camel集群并行处理数据。我似乎可以通过首先拆分数据,然后通过多个JMS消息和一个ActiveMQ经纪人网络分发数据来实现这一点。

虽然让我很难的部分是我需要汇总最后所有节点的所有结果。我目前不确定该怎么做。所有结果最终都必须在一个节点上结束。

所以整体流程如下: (1)检索数据。 (2)将其拆分为可管理的块。 (3)通过ActiveMQ集群将数据块发布到分布式JMS队列中。 (4)在所有节点上处理数据。

现在部分我不知道如何处理:

(5)聚合来自所有节点的处理数据 (6)具有汇总结果的最后处理步骤。

                                                        > [Process data (node 1)] >
[Retrieve DATA] >>>[vm://]>>> [SPLIT] >>>[activemq://]>>> [Process data (node 2)] >>>[activemq://]>>> [AGGREGATE] >>>[vm://]>>> [FINALIZE DATA]
                                                        > [Process data (node 3)] >

如果ActiveMQ经纪人网络愉快地分发所有内容,我如何实现这一目标?仅在一个节点上部署最终聚合路由?不喜欢它,因为那会产生SPOF ......

谢谢!

2 个答案:

答案 0 :(得分:1)

好吧,听起来你可以在聚合舞台上使用exclusive consumer。您应该能够在所有节点上运行该聚合路由。

免责声明:我不确定这个解决方案在经纪人网络上。但你可以试一试,看看它是否有帮助。

答案 1 :(得分:1)

这个用例听起来像组成的消息处理器eip http://camel.apache.org/composed-message-processor.html

Camel仅支持使用拆分器进行聚合,这使得它更加容易。请参阅上面的链接,仅关于拆分器。

对于竞争消费者,您可以让多个节点并行处理数据:http://camel.apache.org/competing-consumers.html

然后您应该通过JMS请求/回复,以便将回复消息发送回汇总消息的队列:http://camel.apache.org/request-reply.html

并确保通过JMS研究有关请求/回复的信息,因为有几个选项可以加快速度:http://camel.apache.org/jms

要让ActiveMQ经纪人分发,您可以在经纪人网络中设置经纪人(NOB):http://activemq.apache.org/networks-of-brokers.html