我需要构建一个使用发布/订阅总线的系统(例如Mule,ZeroMQ,RabbitMQ),但文献都暗示订阅者应用程序可靠地接收来自他们订阅的主题的消息/ Sub总线能够传递消息。
我有一个系统,其中一些应用程序将可靠地连接到发布/订阅总线,但其他应用程序将不会一直处于活动状态或连接到总线。
显而易见的解决方案是在不可靠的应用程序和发布/订阅总线之间建立某种“存在”协议,以便“当前”应用程序立即传递其消息,并且“不存在”应用程序将其消息排入队列中某种类型的持久缓冲区,一旦完成“存在握手”,排队的消息就会传递给新呈现的应用程序。
是否有任何内置此类功能的发布/订阅总线,或者是否有任何开源附加组件可以执行此操作?你能指点我描述这个的任何网址吗?
答案 0 :(得分:6)
您可以使用任何符合AMQP的代理(例如RabbitMQ)轻松实现此行为。
为您的使用模式选择正确的交换类型。如果你总是发送到绝对命名的目的地,你会想要使用direct
交换,例如chat.messages
。
如果您想进行基于模式的路由,则需要使用topic
交换。然后,您可以根据chat.messages.*
等模式进行路由。
要创建您提到的持久订阅类型,请让每个订阅者创建一个对该订阅者私有的队列。然后将队列绑定到您选择的交换机上的相关路由键。
由于每个订户都有自己的队列,因此订阅者在活动时将使用消息,并在订户处于非活动状态或断开连接时进行存储。
答案 1 :(得分:0)
您尚未提及您选择的语言,但在Java中,您可以使用 JMS durable subscribers完成此操作。任何JMS(there are many的实现,包括前面提到的RabbitMQ)都将支持此功能。