2014-04-11 43 views
1

有几台RabbiMQ服务器的主机(clustering) 是否有任何最佳实践来实现有几个RabbitMQ主机,并在上一次连接关闭的情况下重新连接到下一个主机。RabbitMQ客户端连接到几台主机

教程说:

客户端可以正常连接到群集中的任何节点。如果该节点应该失败,并且群集的其余部分仍然存在,则客户端应该注意到已关闭的连接,并且应该能够将 重新连接到群集的一些幸存成员。一般来说,它不是 建议在节点的主机名或IP地址来烤成客户 应用

如何能够从客户端来实现?

回答

3

解决这个典型问题的一种方法是为集群配置一个负载均衡器(它足够用于roud-robin配置)(如HAPROXYcross-road或其他)。

客户机---> IP-负载balacer - 经纪人

这样你可以使用负载平衡器IP在你的客户机连接。

为了更灵活地添加绑定到负载均衡器的DNS(本地dns),这样您也可以在不更改客户端配置的情况下更改平衡器。

客户端(S)---> - 负载balacer-DNSNAME - 经纪人

如果一个客户端失去你所拥有的连接到它重新coonect到同一个IP或者DNS。

对于java,您应该有一个针对c#的高可用性客户端,例如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(); 
} 
相关问题