希望有人能够就此提供一些指导。我在3个节点上设置了RabbitMQ集群。 - Node1(主站),Node2和Node3
我无法弄清楚的部分是我找不到任何有关Master掉线会发生什么的信息,客户指向的是什么?
如果Node1发生故障,那么配置为指向Node1的客户端肯定无法自动故障转移到任何成为新主服务器的客户端?
我的想法是设置一个负载均衡器,用于检测哪个节点是主节点,并且只将请求重定向到该节点?
有什么想法或想法吗?
谢谢:)
答案 0 :(得分:3)
Spring amqp有助于轻松解决这个问题。它提供了开箱即用的故障转移机制。您可以使用逗号分隔配置节点的地址,并在创建连接工厂时将其传递给addresses参数。
例如:
<rabbit:connection-factory id="rabbitConnectionFactory" addresses="192.168.1.2:5672,192.168.1.3:5672" username="${rabbitmq.username}"
connection-factory="clientConnectionFactory"
cache-mode="${rabbit.cacheMode}"
channel-cache-size="${rabbit.channelCacheSize}"
password="${rabbitmq.password}" virtual-host="${rabbitmq.vhost}"/>
这样,当第一个节点发生故障时,将连接到第二个节点。
答案 1 :(得分:1)
如果客户端只能连接到一个节点,并且该节点出现故障,则客户端将失去连接。你需要(正如你猜测的那样)某种设置:
无论哪种解决方案,都不需要将所有客户端流量定向到主节点。客户端节点可以连接到主代理或从代理。
答案 2 :(得分:1)
在CloudAMQP,我们有一个到客户端连接到的群集的URL,我们建议始终将客户端配置为在连接丢失时自动重新连接。
我们在节点之间进行故障转移和负载平衡,并且通过DNS完成,TTL较低(30秒)。