gpt4 book ai didi

java - Curator - 如何知道当前节点是否是领导者

转载 作者:行者123 更新时间:2023-11-30 02:28:09 26 4
gpt4 key购买 nike

只是想知道是否有任何 API 可以使用 Curator Framework 中的 CuratorFramework 类来知道特定节点是领导者。我正在使用 LeaderLatch,但即使 Node 是领导者(由 Zookeeper 框架选举)也无法工作。

注意:集群设置中配置了 3 个节点。

Zookeeper 框架将负责选举节点。我需要知道所选的 Curator 客户端是否指向领导者。

String zkConnString = "172.18.54.211:2181";

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework client1 = CuratorFrameworkFactory.newClient(zkConnString, retryPolicy);
client1.start();

LeaderLatch leaderLatch = new LeaderLatch(client1, "/FirstNode");
try {
leaderLatch.start();

} catch (Exception e1) {
e1.printStackTrace();
}

System.out.println("has leader ship ? "+leaderLatch.hasLeadership());

输出为

has leader ship ? false

用例如下。用例中涉及微服务。 enter image description here

如果LEADER对应的微服务宕机了则需要选择另一个leader。每个微服务都可以被视为一个Z-NODE。如果删除 Z-NODE,则会触发并监听 NODEREMOVED 事件。

LEADER 不应该是微服务下节点。

最佳答案

我认为当第三个实例启动时,LeaderLatch(first, secondary) 的状态已经改变。

leaderLatch.hasLeadership()

应在足够的实例(第 3 个)启动后执行。

或在发生这种情况时注册一个回调方法

实现接口(interface)LeaderLatchListener并重写isLeader()notLeader()是个好主意。

关于java - Curator - 如何知道当前节点是否是领导者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45038662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com