我正在学习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实例推送到另一个实例,这就是我不知道接下来要看什么的位置。
答案 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'。