【问题标题】:Aggregating results of parallel data processing聚合并行数据处理的结果
【发布时间】:2013-03-18 04:10:31
【问题描述】:

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢Petter,我会仔细看看!
    【解决方案2】:

    这个用例听起来像组合消息处理器 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

    【讨论】:

      猜你喜欢
      • 2015-01-15
      • 2015-06-02
      • 2020-08-20
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 2015-09-22
      • 2015-07-28
      • 2019-08-01
      相关资源
      最近更新 更多