使用Java客户端连接到RabbitMQ集群

时间:2017-02-10 20:10:36

标签: java rabbitmq amqp

想象一下,我们拥有带有多个节点的RabbitMQ集群。我对RabbitMQ集群中的HA有一定的了解,但是有很多问题和相关问题让我感到困扰。

节点间连接如何工作

我知道每个队列都绑定到一个节点,它保留master状态,并且可以跨多个节点进行复制。客户端仅与master队列进行通信。我已经读过RabbitMQ节点"重定向"任何客户端尝试使用slave队列时,与另一个节点的连接。 redirects这个词是什么意思?

  • 这是节点间通信吗?就像这对客户端完全透明,节点在后面进行通信就像互连方式一样?
  • 或客户端是否收到有关主节点的通知,是否因此原因打开了新连接?就像Java客户端打开与该节点的新连接以执行所有通信一样?

这引出了另一个问题

客户端是否可以打开与未知节点的新连接

因为我知道可以使用Rabbit节点列表配置ConnectionFactory。如果有一种机制告诉客户端应该打开新连接,那么我的问题是这是否必须是一个已知的连接"列在已提供给ConnectionFactory

的已知Rabbit节点的列表中

我已经阅读了几篇关于负载平衡的文章,这些文章将拓扑元数据保存在一个特殊的数据库中并根据数据使用智能路由,但我发现对于消费者来说实现起来相当复杂,而对于生产者来说非常复杂(因为这只适用于直接交流)。

总结我的问题:

AMQP Java客户端是否为未知节点打开新连接,是否使用这些连接与将来与适当队列所在的节点进行通信?这意味着,如果客户与NODE A联系QUEUE X并获得与NODE B联系的信息,则会打开与NODE B的新连接。对于NODE B的每次访问,该客户端是否会将此连接用于QUEUE X?因为在这种情况下,我发现消费者的负载平衡已经过时了。

或者我错过了什么?

0 个答案:

没有答案