谁是rabbitmq集群管理员?我怎样才能从集群中获得数据?

0 人关注

我创建了rabbitmq集群。有三个节点,一个主节点,两个从节点。当主节点死亡时,谁来决定哪个从节点是新的主节点。谁是集群管理员?我怎样才能从集群中获得数据。我可以从集群中的每个节点获得信息,但例如。我从主节点获得数据,但当主节点死亡时,我需要手动连接到其他节点。但我想连接到集群,每当主节点死亡时,我可以从其他节点获得消息?

python
java
rabbitmq
cluster-computing
newUser
newUser
发布于 2020-02-12
2 个回答
Luke Bakken
Luke Bakken
发布于 2021-10-19
0 人赞同

如果队列主节点停止,你的应用程序将收到一个 "连接丢失 "异常。然后,你根据这个异常采取行动,连接到集群中的任何其他节点。

你不需要知道任何关于 "集群管理器 "的事情。只要连接到另一个节点。

RabbitMQ Java 客户端库支持连接和拓扑结构的自动恢复。

NOTE: RabbitMQ团队监控 rabbitmq-users 邮件列表 并只是有时在StackOverflow上回答问题。

angelgarcan
angelgarcan
发布于 2021-10-19
0 人赞同

There's not sth like "集群管理员" .RabbitMQ集群中的节点使用Raft算法进行分布式共识,并选举它们的领导者(见 http://thesecretlivesofdata.com/raft ).

另一方面,RabbitMQ Java 客户端 API 已经可以像您提出的情况那样管理断开连接。默认情况下,新连接是可恢复的(见 https://www.rabbitmq.com/api-guide.html#connection-recovery ).

你可以用这个片段作为例子来创建与几个节点的连接( addressesStr 列表中的每个String应该像 node_ip:port 一样)。

  public Connection crateConnection(final List<String> addressesStr)
      throws IOException, TimeoutException {
    final ConnectionFactory factory = new ConnectionFactory();
    final List<Address> addresses = new ArrayList<>();
    for (final String address : addressesStr) {
      final String[] addr = address.split(":");
      final String host = addr[0];
      final var port = Integer.parseInt(addr[1]);
      addresses.add(new Address(host, port));