我创建了一个 Curator 客户端,如下所示:
RetryPolicy retryPolicy = new RetryNTimes(3, 1000);
CuratorFramework client = CuratorFrameworkFactory.newClient(zkConnectString,
15000, // sessionTimeoutMs
15000, // connectionTimeoutMs
retryPolicy);
Run Code Online (Sandbox Code Playgroud)
运行客户端程序时,我通过关闭 Curator 用于与 Zookeeper 通信的 NIC 来模拟网络分区。根据我所看到的行为,我有几个问题:
ConnectionStateManager - State change: SUSPENDED10 秒后我看到一条消息。Curator 进入 SUSPENDED 状态之前的时间长度是否可配置(基于其他超时值的百分比),还是始终为 10 秒?ZooKeeper - Session: 0x14adf3f01ef0001 closed在日志中看到一条消息,但是这似乎并没有作为我可以捕获或侦听的事件而逐渐出现。我在这里错过了什么吗?ConnectionStateManager - State change: LOST在连接丢失近两分钟后,我最终收到一条消息。为什么这么久?SUSPENDED如果我的目标是使用 InterProcessMutex 作为防止 HA 场景中脑裂的方法,那么似乎最安全的方法是锁持有者在收到消息时假设它已丢失锁,因为它完全是Zookeeper 可能在网络分区的另一端在它不知情的情况下释放了锁。这是一种典型/理智的方法吗?