17

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

替代文字
(来源:paulstovell.com

(大的)

在 Orders 系统中下订单时,会向任何订阅者(发布/订阅系统)发送一条消息,他们可以在处理订单中发挥作用。OrdersShippingInvoicing应用程序都有自己的 ActiveMQ 安装,因此如果三个系统中的任何一个系统脱机,其他系统都可以继续运行。有些东西负责在 ActiveMQ 安装之间移动消息。

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

下一个挑战是将消息从一个 ActiveMQ 实例推送到另一个实例,这就是我不确定接下来要看什么的地方。

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

2 回答 2

20

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

实际上,您不会将消息从一个 ActiveMQ 实例显式移动到另一个实例。它的工作方式是使用所谓的经纪人网络。在您的情况下,您将拥有三个代理: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 转发到适当的代理和队列。无需将消息显式路由到特定代理。

我希望这回答了你的问题。让我知道你是否还有。

布鲁斯

于 2010-03-03T04:20:44.413 回答
1

嗯,我充其量只是涉足,而且不是很长一段时间,但我会尝试提供一些东西。

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

如果这就是您所追求的,Camel 是否支持 Durable Subscriber ( http://camel.apache.org/durable-subscriber.html )?此模式将确保如果订阅者在消息准备好时处于离线状态,它将一直保持到订阅者重新在线为止。ServiceMix 也支持这一点(请参阅上面给出的链接并查找“subscriptionDurable”。

于 2010-02-17T23:18:51.940 回答