【问题标题】:RabbitMQ Client connect to several hostsRabbitMQ 客户端连接多台主机
【发布时间】:2014-05-25 12:13:59
【问题描述】:

主要目标是拥有多个 RabbiMQ 服务器主机 (clustering) 是否有任何最佳实践来实现拥有多个 RabbitMQ 主机,并在之前的连接关闭时重新连接到下一个主机。

教程说:

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

如何从客户端实现?

【问题讨论】:

    标签: c# rabbitmq failover failovercluster


    【解决方案1】:

    解决这个典型问题的一种方法是为您的集群(如HAPROXYcross-road ..或其他)配置一个负载平衡器(在 roud-robin 配置中就足够了)。

    client(s)--->ip-load-balacer--brokerS

    通过这种方式,您可以在客户端连接中使用负载平衡器 IP。

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

    客户端--->-load-balacer-DNSNAME--brokerS

    如果一个客户端失去连接,您必须将其重新连接到相同的 ip 或 dns。

    您应该有一个用于 c# 的 HA 客户端,例如用于 java 的 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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多