我的问题与Leader Latch 配方有关。
我想使用领导者闩锁来为计划的作业实现互斥锁。还有另一个要求:如果计划的作业从下午 1:00:00.005 开始并在下午 1:00:00.015 结束,那么在下午 1:00:30.000 之前没有其他作业/实例应该开始相同的任务(为此我正在考虑在作业中实现异步发布)。
来自文档:https ://curator.apache.org/curator-recipes/leader-latch.html
错误处理
LeaderLatch 实例添加一个 ConnectionStateListener 来监视连接问题。如果报告了SUSPENDED或LOST,则作为leader的LeaderLatch会报告它不再是leader(即在重新建立连接之前不会有leader)。如果 LOST 连接被重新连接,LeaderLatch 将删除其先前的 ZNode 并创建一个新的。
LeaderLatch 的用户必须考虑到连接问题可能导致失去领导力。即 hasLeadership() 返回 true 但一段时间后连接被挂起或丢失。那时 hasLeadership() 将返回 false。强烈建议 LeaderLatch 用户注册 ConnectionStateListener。
如果我理解正确,如果领导者 I1(实例 1)出现故障,那么其他实例将等到 I1 重新联机并重新建立连接。但是如果 I1 不再起床会怎样?其他实例能否成为领导者?如何以及何时?或者其他实例会被永远锁定吗?它们如何被解锁?
我的期望是,不知何故,在幕后,领导者连接应该有一个超时。也许这可能与 Curator 客户端的配置方式有关。也许当连接丢失时,会发生一些重新选举。但是上面提到的错误处理部分和https://curator.apache.org/errors.html中都没有描述这些