只是想知道是否有任何API可以知道在Curator框架中使用CuratorFramework类的特定节点是领导者。我正在使用LeaderLatch,但即使节点是leader(由Zookeeper框架选择),也无法工作。
注意:在集群设置中配置了3个节点。
Zookeeper框架将负责选择节点。我需要知道选定的策展人客户是否指向领导者。
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
如果领导相应的微服务失败,则需要选择其他领导。每个微服务都可以被视为一个Z节点。如果Z节点被删除,将触发并监听NODEREMOVED事件。
LEADER不应该是微服务关闭节点。
我认为您需要通过以下代码向LeadLatch添加侦听器:
leaderLatch.addListener(new LeaderLatchListener {
override def isLeader(): Unit = {
println(s"I am the lead $i")
}
override def notLeader(): Unit = {
println(s"i am not the leader any more $i")
}
})
根据文件记载,领导人选举是不同步的。这意味着,在你开始领导人选举后,领导人信息不一定立即可用。
你应该先等待领导人选举完成。
不幸的是,我无法找到使用org/apache/curator/框架/食谱/领导者
包中的类获取选举完成信息的干净方法:该应用编程接口仅提供检查领导层变更的方法。
我能找到的最接近的查询是(使用Java8):
new LeaderSelector(clientFramework, path, new NoOpLeaderSelectorListener())
.getParticipants().stream()
.filter(Participant::isLeader)
.map(Participant::getId)
.findAny()
.ifPresent(<... do something with leader node Id ...>);
但我仍然不清楚这是否会比最初的变体更确定地产生正确的结果。
它将做的是:
还有一个类似的查询:
new LeaderSelector(clientFramework, path, new NoOpLeaderSelectorListener())
.getLeader()
第一个查询和第二个查询的区别在于,如果没有节点,则返回dummy participant is object,而第一个查询相对透明地返回Optional。empty()
如果没有节点。
我认为当第三个实例开始时,LeaderLatch(第一,第二)的状态已经改变。
leaderLatch.hasLeadership()
应在足够多的实例(第3个)启动后执行。
或者注册一个回调方法
。
实现接口LeaderLatchListener
并重写isLeader()
或notLeader()
是个好主意。
我再次需要一些Java帮助...我有这个简单的自定义节点类: 我需要实现一个静态布尔方法,该方法将两个节点作为参数,如果第一个节点的所有元素都包含在第二个节点中,则返回true。示例输出: 这是我的想法: 对于< code >节点p的每个元素,我必须检查它是否也在< code >节点q中。如果为真,我增加一个名为< code>count的整数,否则我什么也不做。一旦在所有p元素上完成了这个检查,我
在我的应用程序中,我需要能够捕捉到编辑文本(editText)是否失去了焦点,我已经在java中找到了如何做到这一点,但在kotlin中我还不能找到如何做到这一点。 我找到的Java答案是: 有人能帮我把这个转换成kotlin吗?
我正在创建kubernetes集群,其中包括:1个主节点(M1),2个工作节点(W1和W2) 使用部署创建副本数为5的吊舱。
问题内容: 即使文件在远程http服务器上不存在,它也会以静默方式返回,它只是将html页面保存到命名文件中。例如: 即使abc.jpg在google.com服务器上不存在,它只是默默返回,生成的不是有效的jpg文件,它实际上是html页面。我猜返回的标头(一个httplib.HTTPMessage实例)可以用来实际上告诉检索是否成功,但是我找不到的任何文档。 有人可以提供有关此问题的一些信息吗?
我在馆长2.12.0中使用动物园管理员。 通过使用watcher调用getChildren(我事先不知道完整的节点路径),我成功地监视了新节点,watcher再次提交任务以调用getChildren with watcher。现在我想看节点移除和仅移除。我打电话给守望者。但如果节点由于某种原因不存在,它实际上将是节点创建的观察者,在我的例子中,这是永远不会发生的。因此,我将留下越来越多的“鞭打”观
在Android上有没有办法知道,如果运行我的代码的线程,是UI线程还是不是?在swing中,有来告诉我是否在UI线程上。安卓SDK里有什么功能让我知道这一点吗?