我想使用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 ......
谢谢!
答案 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