CuratorFrameworkFactory有四种重连策略,均实现了RetryPolicy接口.
zk server端timeout参数
tickTime:zk的心跳间隔(heartbeat interval),也是session timeout基本单位.单位为毫秒.
minSessionTimeout:最小超时时间,zk设置的默认值为2*tickTime.
maxSessionTimeout:最大超时时间,zk设置的默认值为20*tickTime.
客户端实际的超时时间.
-
int minSessionTimeout = zk.getMinSessionTimeout();
-
if (sessionTimeout < minSessionTimeout) {
-
sessionTimeout = minSessionTimeout;
-
}
-
int maxSessionTimeout = zk.getMaxSessionTimeout();
-
if (sessionTimeout > maxSessionTimeout) {
-
sessionTimeout = maxSessionTimeout;
-
}
如果sessionTimeout的设置小于minSessionTimeout,则采用服务器的minSessionTimeout配置
如果sessionTimeout的设置大于maxSessionTimeout,则采用服务器的maxSessionTimeout配置.
客户端的超时设置,不能超过服务器端配置的范围
Curator 的客户端超时设置.
CuratorFrameworkFactory.newClient
连接超时15s
Session超时60s
-
private static final int DEFAULT_SESSION_TIMEOUT_MS = Integer.getInteger("curator-default-session-timeout", 60 * 1000);
-
private static final int DEFAULT_CONNECTION_TIMEOUT_MS = Integer.getInteger("curator-default-connection-timeout", 15 * 1000);
-
-
-
public static CuratorFramework newClient(String connectString, RetryPolicy retryPolicy)
-
{
-
return newClient(connectString, DEFAULT_SESSION_TIMEOUT_MS, DEFAULT_CONNECTION_TIMEOUT_MS, retryPolicy);
-
}
Curator 四种重连策略
1.RetryUntilElapsed(int maxElapsedTimeMs, int sleepMsBetweenRetries)
以sleepMsBetweenRetries的间隔重连,直到超过maxElapsedTimeMs的时间设置
2.RetryNTimes(int n, int sleepMsBetweenRetries)
指定重连次数
3.RetryOneTime(int sleepMsBetweenRetry)
重连一次,简单粗暴
4.ExponentialBackoffRetry
ExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries)
ExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries, int maxSleepMs)
时间间隔 = baseSleepTimeMs * Math.max(1, random.nextInt(1 << (retryCount + 1)))
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-2120610/
,如需转载,请注明出处,否则将追究法律责任。