0

我想使用 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……</p>

谢谢!

4

2 回答 2

1

好吧,听起来您可以在聚合阶段使用独占消费者。您应该能够在所有节点上运行该聚合路由。

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

于 2013-03-18T04:52:21.267 回答
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

于 2013-03-26T08:47:50.550 回答