0

我们正处于建筑的十字路口。

以前的系统使用共享数据库来相互通信,但我们希望摆脱 cfschedule 轮询延迟。所有子系统都用CF编写。

我正在研究 MOM,很可能是 ActiveMQ,因为 CF 带有一个事件网关,或者基本的远程方法调用。附带问题:*.cfc?method=通过 http 使用会比将它们作为 SOAP Web 服务调用更快吗?

我们还希望能够记录失败的尝试、查询实际状态,并可能在一段时间后自动重试。MOM / ActiveMQ 符合我们的要求吗?我们应该实现我们自己的队列吗?

此外,我们将使用 CF 标准,因此事件网关仅限于 1 个线程和 2 个自定义线程并发。

任何意见或建议将不胜感激,谢谢!

4

1 回答 1

2

鉴于您询问的是用 ActiveMQ 或远程方法调用替换共享数据库,我假设您的用例实际上是消息传递与应用程序共享状态;shared DB 显然是在多个应用程序之间进行共享状态的好方法。您的描述也让我认为您的应用程序正在向其他应用程序发送通知或事件,因为发生了一些有趣的事情......

当您调用单个应用程序时,远程方法调用起作用,您需要立即响应,并且您知道另一个应用程序将可用(即正在运行)。如果在需要发送消息时接收应用程序可能没有运行,许多系统会发现这种方法具有挑战性。如果您当前或将来需要发送到多个应用程序,远程方法调用也具有挑战性,特别是如果发送应用程序不知道未来的接收者。

MOM,特别是 ActiveMQ,是一种可靠的异步向一个或多个接收器发送消息的好方法。发送应用程序给 ActiveMQ 消息,然后继续做它的工作(不会阻止你的应用程序做更多的工作)。消息接收者将在连接到 ActiveMQ 时接收消息 - 也就是说,如果在发送消息时它们已连接,其速度与远程方法一样快;如果接收者稍后连接,他们将在连接时接收(无轮询)。ActiveMQ 确保消息是安全的,直到接收者确认接收。

如果您正在发送事件,使用像 ActiveMQ 这样的消息传递系统非常好,因为您可以使用称为发布/订阅的范例,其中可以将消息(事件)传递给多个接收者。发送应用程序不知道这些接收者;他们只需要知道如何连接到 ActiveMQ。这种范式是解耦应用程序的好方法;您的应用程序发送有趣的事件,而其他可以从知道该事件发生中受益的应用程序将来可以连接到 ActiveMQ...

Gregor Hohpe 的Enterprise Integration Patterns站点是许多集成模式(包括发布/订阅)的重要资源。有关 ActiveMQ 的更多信息可以在 Apache ActiveMQ 或FuseSource 的 ActiveMQ站点上找到

希望有帮助,

斯科特

于 2011-07-01T12:45:16.600 回答