Rabbitmq PubSub&x2B;向不可靠的订户提供可靠的消息传递

Rabbitmq PubSub&x2B;向不可靠的订户提供可靠的消息传递,rabbitmq,publish-subscribe,mule,unreliable-connection,reliable-message-delivery,Rabbitmq,Publish Subscribe,Mule,Unreliable Connection,Reliable Message Delivery,我需要构建一个使用发布/订阅总线(例如Mule、ZeroMQ、RabbitMQ)的系统,但文献都表明,只要发布/订阅总线能够传递消息,订阅应用程序就可以可靠地从订阅的主题接收消息 我有一个系统,其中一些应用程序将可靠地连接到发布/订阅总线,但其他应用程序不会一直处于活动状态或连接到总线 显而易见的解决方案是在不可靠的应用程序和发布/订阅总线之间使用某种“存在”协议,以便“存在”应用程序立即获得消息传递,而“不存在”应用程序在完成消息传递后立即将其消息排队到某种类型的持久缓冲区中“状态握手”,排队

我需要构建一个使用发布/订阅总线(例如Mule、ZeroMQ、RabbitMQ)的系统,但文献都表明,只要发布/订阅总线能够传递消息,订阅应用程序就可以可靠地从订阅的主题接收消息

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

显而易见的解决方案是在不可靠的应用程序和发布/订阅总线之间使用某种“存在”协议,以便“存在”应用程序立即获得消息传递,而“不存在”应用程序在完成消息传递后立即将其消息排队到某种类型的持久缓冲区中“状态握手”,排队的消息被传递到新出现的应用程序


有没有内置这种功能的发布/订阅总线,或者有没有实现这种功能的开源插件?您能给我指一下描述这种功能的URL吗?

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

为您的使用模式选择正确的交换类型。如果您总是发送到绝对命名的目的地,例如
聊天室。消息
,则需要使用
直接
交换

如果要执行基于模式的路由,您需要使用
topic
exchange。然后您可以基于模式进行路由,例如
chat.messages.*

有关路由的详细信息,请参阅

要创建您提到的那种持久订阅,请让每个订阅服务器创建一个该订阅服务器专用的队列。然后,该队列将绑定到所选exchange上的相关路由密钥


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

您没有提到您选择的语言,但在Java中,您可以使用。JMS的任何实现(,包括前面提到的RabbitMQ)将支持此功能