拥有多个RabbiMQ服务器主机的主要目标(clustering) 是否有任何最佳实践可以实现具有多个RabbitMQ主机,并在以前的连接关闭时重新连接到下一个主机。
教程说:
客户端可以正常连接到群集中的任何节点。如果说 节点应该失败,并且群集的其余部分存活,然后是 客户端应该注意到已关闭的连接,并且应该能够 重新连接到群集中某些幸存的成员。一般来说,事实并非如此 建议将节点主机名或IP地址烘焙到客户端 应用
如何从客户端实施?
答案 0 :(得分:4)
解决此典型问题的一种方法是为群集配置负载均衡器(roud-robin配置足够)(如HAPROXY,cross-road或其他)。
客户端(一个或多个)---> IP-负载balacer - 经济
通过这种方式,您可以在客户端连接中使用仅负载均衡器IP。
为了获得更大的灵活性,您可以添加绑定到负载均衡器的DNS(本地DNS),这样您也可以在不更改客户端配置的情况下更改平衡器。
客户端(一个或多个)---> -load-balacer-DNSNAME - 经济
如果一个客户端失去连接,则必须将其重新连接到相同的ip或dns。
对于java,您应该有一个用于c#的HA客户端,例如this,或者只是管理连接关闭事件。
说,如果你有一个小而静态的集群,你可以使用客户端的IP。
从客户端(如果您只想处理断开连接):
connection = connection = factory.CreateConnection();
channel = connection.CreateModel();
.......
connection.ConnectionShutdown += Connection_ConnectionShutdown;
void Connection_ConnectionShutdown(IConnection connection, ShutdownEventArgs reason)
{
Console.WriteLine("connection_ConnectionShutdown " + reason.ToString());
Reconnect_client();
}