5

我需要构建一个使用 Publish/Subscribe 总线(例如 Mule、ZeroMQ、RabbitMQ)的系统,但文献都暗示订阅者应用程序可以可靠地接收来自他们订阅的主题的消息,只要 Pub/Sub 总线能够传递消息。

我有一个系统,其中一些应用程序将可靠地连接到发布/订阅总线,但其他应用程序不会一直处于活动状态或连接到总线。

显而易见的解决方案是在不可靠的应用程序和发布/订阅总线之间建立某种“存在”协议,以便“存在”应用程序立即传递它们的消息,而“不存在”应用程序将它们的消息排队在持久缓冲区中某种形式的,一旦他们完成“在场握手”,排队的消息就会被传递给新出现的应用程序。

是否有任何发布/订阅总线内置了这种功能,或者是否有任何开源插件可以做到这一点?你能指出任何描述这一点的网址吗?

4

2 回答 2

6

您可以使用任何符合 AMQP 的代理(例如 RabbitMQ)轻松实现此行为。

为您的使用模式选择正确的交换类型。如果您direct总是发送到绝对命名的目的地,例如chat.messages.

如果你想做基于模式的路由,你会想要使用topic交换。然后,您可以根据诸如chat.messages.*.

路由在RabbitMQ 教程中有更详细的描述。

要创建您提到的那种持久订阅,请让每个订阅者创建一个该订阅者专用的队列。然后,队列将绑定到您选择的交换机上的相关路由键。

由于每个订阅者都有自己的队列,消息将在订阅者处于活动状态时被消耗,而在订阅者处于非活动状态或断开连接时被存储。

于 2011-06-28T19:55:47.427 回答
0

您没有提到您选择的语言,但在 Java 中,您可以使用JMS使用持久订阅者来完成此操作。JMS 的任何实现(有很多,包括前面提到的 RabbitMQ)都将支持此功能。

于 2011-06-30T19:18:26.603 回答