我正在学习 ActiveMQ 和 Camel,目标是创建一个小原型系统,其工作原理如下:

alt text
(来源: 保罗斯托维尔网站)

(大的)

当在订单系统中下订单时,一条消息会发送给任何订阅者(发布/订阅系统),他们可以在处理订单中发挥自己的作用。这 命令, 船运开具发票 应用程序都有自己的 ActiveMQ 安装,因此,如果三个系统中的任何一个系统离线,其他系统都可以继续运行。 某物 负责在 ActiveMQ 安装之间移动消息。

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

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

  1. Camel 可以在不同的 ActiveMQ 安装之间路由吗?(如果它们位于不同的计算机上,我无法弄清楚 JMI 端点 URI 是什么)。
  2. 我了解 ActiveMQ 有 存储并转发 能力。这是我用来在订单和运输/发票之间移动消息的方法吗?
  3. 或者这就是什么 阿帕奇服务混合 是为了解决?
有帮助吗?

解决方案

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

实际上,您并没有显式地将消息从一个 ActiveMQ 实例移动到另一个实例。它的工作方式是使用所谓的 经纪人网络. 。就您而言,您将拥有三个经纪人:ActiveMQ-紫色、ActiveMQ-绿色和ActiveMQ-蓝色。ActiveMQ-purple 使用 ActiveMQ-green 和 ActiveMQ-blue 创建单向代理网络。这使得 ActiveMQ-purple 能够根据消费者的需求存储消息并将其转发到 ActiveMQ-green 和 ActiveMQ-blue。

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

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

我希望这回答了你的问题。如果你还有的话请告诉我。

布鲁斯

其他提示

嗯,我最多只是涉足一段时间,但我会尝试提供一些东西。

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

如果您想要的话,Camel 支持持久订阅者(http://camel.apache.org/durable-subscriber.html)?此模式将确保,如果订阅者在消息准备好时离线,消息将被保留,直到订阅者重新上线。ServiceMix 也支持这一点(请参阅上面给出的链接并查找“subscriptionDurable”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top