分布式ActiveMQ与Camel

时间:2010-02-17 09:10:41

标签: apache-camel activemq apache-servicemix

我正在学习ActiveMQ和Camel,目标是创建一个像这样的小型原型系统:

alt text http://www.paulstovell.com/get/stackoverflow-questions/Queues.png (big)

当订单放入订单系统时,会向任何订户(发布/订阅系统)发送消息,他们可以在处理订单时发挥作用。 Orders Shipping Invoicing 应用程序都有自己的ActiveMQ安装,因此如果三个系统中的任何一个处于脱机状态,其他系统可以继续功能。 Something 负责在ActiveMQ安装之间移动消息。

如果Apache Camel位于同一个ActiveMQ实例上,那么通过路由将Apache Camel从一个队列移动到另一个队列非常容易。所以这适用于管理订阅队列。

接下来的挑战是将消息从一个ActiveMQ实例推送到另一个实例,这就是我不知道接下来要看什么的位置。

  1. Camel可以在不同的ActiveMQ安装之间路由吗? (如果它们在不同的机器上,我无法弄清楚JMI端点URI是什么)。
  2. 我了解ActiveMQ具有store and forward功能。这是我用来在订单和发货/发票之间移动消息吗?
  3. 或者这是Apache ServiceMix要解决的问题吗?

2 个答案:

答案 0 :(得分:20)

这是一个非常简单的异步,事件驱动的应用程序,非常适合ActiveMQ和Camel。

实际上,您不会将消息从一个ActiveMQ实例显式移动到另一个ActiveMQ实例。它的工作方式是使用所谓的network of brokers。在你的情况下,你有三个经纪人:ActiveMQ-purple,ActiveMQ-green和ActiveMQ-blue。 ActiveMQ-purple使用ActiveMQ-green和ActiveMQ-blue创建单向代理网络。这允许ActiveMQ-purple根据消费者需求将消息存储和转发到ActiveMQ-green和ActiveMQ-blue。

Orders应用程序接受ActiveMQ-purple上订单队列的订单。 Orders应用程序使用Camel来使用和处理消息,以确定它是发票消息还是发货消息。 Camel将消息路由到ActiveMQ-purple上的开票队列或送货队列。

消费者需求来自Invoicing应用程序和Shipping应用程序。 Invoicing使用Camel消耗来自ActiveMQ-green上的发票队列的消息。 Shipping应用程序使用Camel来消耗ActiveMQ-blue上的发货队列中的消息。由于代理网络以及ActiveMQ-green.invoicing队列和ActiveMQ-blue.shipping队列的消费者需求,消息将从ActiveMQ-purple转发到适当的代理和队列。无需将消息显式路由到特定代理。

我希望这能回答你的问题。如果你有,请告诉我。

布鲁斯

答案 1 :(得分:1)

嗯,我只是喋喋不休地谈论,而不是一段时间,但我会尝试提供一些东西。

ActiveMQ可以在不同的安装之间路由,只是根据我的知识使用标准URI,所以我不确定这里的问题是什么。我认为使用TCP你会没事的。使用ServiceMix(您稍后提到),您只需指定一个connectionFactory&然后提供URI。此链接显示了一些示例http://servicemix.apache.org/servicemix-jms-new-endpoints.html

如果您追求的是http://camel.apache.org/durable-subscriber.html),Camel会支持Durable Subscriber吗?此模式将确保如果订户在消息准备就绪时处于脱机状态,则将保留该订户直到订户重新联机。 ServiceMix也支持这一点(请参阅上面给出的链接并查找'subscriptionDurable'。