如果Hazelcast群集实例之一将获得锁定并在锁定状态下死亡,将会发生什么情况?
例如

if (hz.getCPSubsystem().getLock("lockName").tryLock(500, TimeUnit.MILLISECONDS)){
    try{
      System.exit(0);
    }finally {
        hz.getCPSubsystem().getLock("lockName").unlock();
    }

}

最佳答案

简短版:CP子系统具有一种会话机制,可跟踪所有成员的活动状态。当识别出持有锁的成员死亡时,锁将被释放。可以根据需要调整会话心跳机制,以满足特定应用程序的性能需求。

加长版:建议阅读此博客文章:
 https://hazelcast.com/blog/long-live-distributed-locks/
尤其是“如果锁持有人死亡会发生什么”一节。

使这种类型的代码可靠的棘手方面之一是当出现网络问题时发生的事情……例如,锁持有人可能脱机,并且看不到心跳。因此,群集将锁持有者声明为死亡,释放该锁,然后将其分配给其他人。然后,锁持有者重新联机并尝试继续处理,以为它仍然具有锁。 Hazelcast中的FencedLock实现将把锁识别为过时的,并且不允许过时的锁的持有者继续进行-他必须重新获取该锁,然后才能执行该锁所涵盖的任何操作。

10-06 02:11