我创建了rabbitmq集群。有三个节点,一个主节点,两个从节点。当主节点死亡时,谁来决定哪个从节点是新的主节点。谁是集群管理员?我怎样才能从集群中获得数据。我可以从集群中的每个节点获得信息,但例如。我从主节点获得数据,但当主节点死亡时,我需要手动连接到其他节点。但我想连接到集群,每当主节点死亡时,我可以从其他节点获得消息?
如果队列主节点停止,你的应用程序将收到一个 "连接丢失 "异常。然后,你根据这个异常采取行动,连接到集群中的任何其他节点。
你不需要知道任何关于 "集群管理器 "的事情。只要连接到另一个节点。
RabbitMQ Java 客户端库支持连接和拓扑结构的自动恢复。
NOTE:
RabbitMQ团队监控
rabbitmq-users
。
邮件列表
并只是有时在StackOverflow上回答问题。
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));