网络抖动,客户端和ZK集群的session连接断了,那么zk以为客户端挂了,就会删除临时节点,这时候其他客户端就可以获取到分布式锁了
zk有重试机制,一旦zk集群检测不到客户端的心跳,就会重试,Curator客户端支持多种重试策略。多次重试之后还不行的话才会删除临时节点。
RetryUntilElapsed(int maxElapsedTimeMs, int sleepMsBetweenRetries)以sleepMsBetweenRetries的间隔重连,直到超过maxElapsedTimeMs的时间设置
RetryNTimes(int n, int sleepMsBetweenRetries)指定重连次数
RetryOneTime(int sleepMsBetweenRetry)重连一次,简单粗暴
ExponentialBackoffRetryExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries)ExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries, int maxSleepMs)时间间隔和最大重试次数
zk server端timeout参数tickTime:zk的心跳间隔(heartbeat interval),也是session timeout基本单位.单位为毫秒.minSessionTimeout:最小超时时间,zk设置的默认值为2*tickTime.maxSessionTimeout:最大超时时间,zk设置的默认值为20*tickTime
Curator 的客户端超时设置.CuratorFrameworkFactory.newClient连接超时15sSession超时60s