Curator 重連策略與超時

壹頁書發表於2016-06-21
CuratorFrameworkFactory有四種重連策略,均實現了RetryPolicy介面.

zk server端timeout引數
tickTime:zk的心跳間隔(heartbeat interval),也是session timeout基本單位.單位為毫秒.
minSessionTimeout:最小超時時間,zk設定的預設值為2*tickTime.
maxSessionTimeout:最大超時時間,zk設定的預設值為20*tickTime.


客戶端實際的超時時間.
  1. int minSessionTimeout = zk.getMinSessionTimeout();    
  2. if (sessionTimeout < minSessionTimeout) {    
  3.     sessionTimeout = minSessionTimeout;    
  4. }    
  5. int maxSessionTimeout = zk.getMaxSessionTimeout();    
  6. if (sessionTimeout > maxSessionTimeout) {    
  7.     sessionTimeout = maxSessionTimeout;    
  8. }    

如果sessionTimeout的設定小於minSessionTimeout,則採用伺服器的minSessionTimeout配置
如果sessionTimeout的設定大於maxSessionTimeout,則採用伺服器的maxSessionTimeout配置.
客戶端的超時設定,不能超過伺服器端配置的範圍

Curator 的客戶端超時設定.
CuratorFrameworkFactory.newClient
連線超時15s
Session超時60s
  1. private static final int DEFAULT_SESSION_TIMEOUT_MS = Integer.getInteger("curator-default-session-timeout"60 * 1000);  
  2. private static final int DEFAULT_CONNECTION_TIMEOUT_MS = Integer.getInteger("curator-default-connection-timeout"15 * 1000);  
  3.   
  4.   
  5. public static CuratorFramework newClient(String connectString, RetryPolicy retryPolicy)  
  6. {  
  7.     return newClient(connectString, DEFAULT_SESSION_TIMEOUT_MS, DEFAULT_CONNECTION_TIMEOUT_MS, retryPolicy);  
  8. }  


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部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2120610/,如需轉載,請註明出處,否則將追究法律責任。

相關文章