5

我需要建立一个使用发布/订阅总线(例如Mule,ZeroMQ,RabbitMQ)的系统,但是这些文献都暗示用户应用程序可靠地接收来自主题的消息一旦Pub/Sub公交车能够传递信息,他们就会认购。PubSub +可靠的消息传递给不可靠的目前用户

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

明显的解决方案是在不可靠的应用程序和发布/订阅总线之间建立某种“存在”协议,以便“现在”的应用程序立即获得他们的消息,“不存在”应用程序将其消息排队在某种类型的持久缓冲区中,并且只要他们完成“在场握手”,排队的消息就会传送到新近出现的应用程序。

是否有任何内置这种功能的发布/订阅总线,或者是否有任何这样的开源附加软件?你能指出我描述这个的任何URL吗?

回答

4

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

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

如果要执行基于模式的路由,则需要使用topic交换。然后,您可以根据模式(例如chat.messages.*)进行路由。

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

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

由于每个用户都有自己的队列,当用户处于非活动状态或断开连接时,消息将在活动时被消费,并被存储。

0

你没有提到你所选择的语言,但在Java中,你可以使用durable subscribersJMS做到这一点。 JMS的任何实现(there are many,包括前述的RabbitMQ)都将支持此功能。