rabbitmq HA集群

rabbitmq HA集群,rabbitmq,high-availability,Rabbitmq,High Availability,我想将RabbitMQ设置为具有HA的两个(或更多)节点集群 用例:客户端生产者应用程序(C#.NET)知道集群有两个节点,并发布到集群。各种消费者应用程序(也是C#.NET)连接到集群并获取生产者生成的所有消息。只要至少有一个节点处于启动和运行状态,生产者和消费者都将继续正常工作。假设节点A和B正在运行,而B死了一段时间,然后重新启动,然后A死了一段时间,客户端都会继续工作,而不会收到错误,因为在任何时候至少有一个节点处于运行状态 它能像这样开箱即用吗 是否有其他更适合Windows/.NET

我想将RabbitMQ设置为具有HA的两个(或更多)节点集群

用例:客户端生产者应用程序(C#.NET)知道集群有两个节点,并发布到集群。各种消费者应用程序(也是C#.NET)连接到集群并获取生产者生成的所有消息。只要至少有一个节点处于启动和运行状态,生产者和消费者都将继续正常工作。假设节点A和B正在运行,而B死了一段时间,然后重新启动,然后A死了一段时间,客户端都会继续工作,而不会收到错误,因为在任何时候至少有一个节点处于运行状态

它能像这样开箱即用吗

是否有其他更适合Windows/.NET应用程序环境的MQs(商业ok)

它能像这样开箱即用吗

否。当节点停止运行时,其所有连接都将关闭。由于AMQP连接是有状态的,因此无法避免这种情况。您可以实现的是1)代理宕机,2)所有客户端断开连接,3)客户端连接到其他节点(伪装为原始节点),但都不明智


另一方面,rabbit目前不支持活动HA集群。它确实支持和一种形式的(这可能是您正在寻找的)。

现在支持使用主动/主动群集的高可用性队列。微软和其他一些公司已经合作开发了具有C#绑定并且还支持主动/主动HA集群的应用程序

因此,在客户端检测到连接已断开(这是ALREADCYCLOSEDEXCEPTION吗?)后,它应该尝试重新连接到群集,并且应该自动为其分配一个剩余节点以供使用?或多或少,是的。轻微的问题是您需要连接到集群中的另一个节点(因为原来的节点已关闭);您可以使用负载平衡器来实现这一点。在那之后,一切照旧。从客户端的角度来看,它将看到相同的配置(相同的队列、交换)。因此,对于负载平衡器,客户端似乎只有一个IP地址,但erlang节点本身都将使用其真实的IP地址。您成功地实现了这一点吗?我将尝试做类似的事情。