如果每条消息都将路由到主节点,为什么要将负载平衡器放在RabbitMQ节点集群(相同队列)的前面?
根据,如果队列跨多个服务器(节点)镜像,则发布服务器写入哪个队列无关紧要—RabbitMQ将始终将消息转发到主节点(队列第一次创建的节点)如果每条消息都将路由到主节点,为什么要将负载平衡器放在RabbitMQ节点集群(相同队列)的前面?,rabbitmq,Rabbitmq,根据,如果队列跨多个服务器(节点)镜像,则发布服务器写入哪个队列无关紧要—RabbitMQ将始终将消息转发到主节点(队列第一次创建的节点) 如果是这种情况,那么如果每条消息最终都会被路由到同一个节点,那么在节点前面放置负载平衡器有什么意义呢?主节点似乎总是承担整个负载。我将给出一个示例场景,以便于理解: 您有一个2节点的集群,顶部有一个负载平衡器 客户端连接到LB,并连接到节点1,该节点是queue1所在的位置(主节点) 队列已启用HA,因此队列1也在节点2上复制 node1由于某种原因失败,
如果是这种情况,那么如果每条消息最终都会被路由到同一个节点,那么在节点前面放置负载平衡器有什么意义呢?主节点似乎总是承担整个负载。我将给出一个示例场景,以便于理解:
- 您有一个2节点的集群,顶部有一个负载平衡器
- 客户端连接到LB,并连接到节点1,该节点是queue1所在的位置(主节点)
- 队列已启用HA,因此队列1也在节点2上复制
- node1由于某种原因失败,因此队列1的新主节点现在是node2
- 客户端连接断开,LB现在将他连接到节点2,因此客户端的一切仍然正常
最后,根据您的用例,您可以做一些巧妙的事情来确保客户机始终连接到主队列所在的实例,但这实际上取决于您的具体需求。我将给出一个示例场景,使其易于理解:
- 您有一个2节点的集群,顶部有一个负载平衡器
- 客户端连接到LB,并连接到节点1,该节点是queue1所在的位置(主节点)
- 队列已启用HA,因此队列1也在节点2上复制
- node1由于某种原因失败,因此队列1的新主节点现在是node2
- 客户端连接断开,LB现在将他连接到节点2,因此客户端的一切仍然正常
最后,根据您的用例,您可以做一些巧妙的事情来确保客户端始终连接到主队列所在的实例,但这实际上取决于您的具体需求。谢谢。因此,LB并不是真正意义上的共享负载,而是确保客户机始终能够到达其中一个可用节点?这是正确的。您仍然可以让您的客户机硬编码所有群集DSN,但这确实是一个更有限的问题解决方案。谢谢。因此,LB并不是真正意义上的共享负载,而是确保客户机始终能够到达其中一个可用节点?这是正确的。您仍然可以让您的客户机硬编码所有集群DSN,但这实际上是一个更有限的解决方案。