想象一下,我们拥有带有多个节点的RabbitMQ集群。我对RabbitMQ集群中的HA有一定的了解,但是有很多问题和相关问题让我感到困扰。
节点间连接如何工作
我知道每个队列都绑定到一个节点,它保留master
状态,并且可以跨多个节点进行复制。客户端仅与master
队列进行通信。我已经读过RabbitMQ节点"重定向"任何客户端尝试使用slave
队列时,与另一个节点的连接。 redirects
这个词是什么意思?
这引出了另一个问题
客户端是否可以打开与未知节点的新连接
因为我知道可以使用Rabbit节点列表配置ConnectionFactory
。如果有一种机制告诉客户端应该打开新连接,那么我的问题是这是否必须是一个已知的连接"列在已提供给ConnectionFactory
我已经阅读了几篇关于负载平衡的文章,这些文章将拓扑元数据保存在一个特殊的数据库中并根据数据使用智能路由,但我发现对于消费者来说实现起来相当复杂,而对于生产者来说非常复杂(因为这只适用于直接交流)。
总结我的问题:
AMQP Java客户端是否为未知节点打开新连接,是否使用这些连接与将来与适当队列所在的节点进行通信?这意味着,如果客户与NODE A
联系QUEUE X
并获得与NODE B
联系的信息,则会打开与NODE B
的新连接。对于NODE B
的每次访问,该客户端是否会将此连接用于QUEUE X
?因为在这种情况下,我发现消费者的负载平衡已经过时了。
或者我错过了什么?