Zookeeper構造函數

1java

/*
1 connectString: zk服務端的地址和端口,用,分割;可選添加路徑前綴;鏈接時是隨機選擇地址鏈接
2 sessionTimeout:會話週期,單位是毫秒;客戶端和服務端經過心跳檢測會話的有效性
3 wachter:鏈接是異步的。對象會馬上返回,但並未鏈接成功。鏈接成功,狀態改變,會通知watcher
4 canBeReadOnly:當客戶端失去大部分zk servers的網絡鏈接,但仍能鏈接部分server,是否提供只讀服務(不可能提供寫
  服務)
5 aHostProvider: 隨機提供host進行鏈接。不關注,默認的便可。
6 clientConfig : 能夠設置鏈接參數。
*/
public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher,
        boolean canBeReadOnly, HostProvider aHostProvider,
        ZKClientConfig clientConfig) throws IOException {
    LOG.info("Initiating client connection, connectString=" + connectString
            + " sessionTimeout=" + sessionTimeout + " watcher=" + watcher);

    if (clientConfig == null) {
        clientConfig = new ZKClientConfig();
    }
    this.clientConfig = clientConfig;
    watchManager = defaultWatchManager();
    watchManager.defaultWatcher = watcher;
    ConnectStringParser connectStringParser = new ConnectStringParser(
            connectString);
    hostProvider = aHostProvider;

    cnxn = new ClientCnxn(connectStringParser.getChrootPath(),
            hostProvider, sessionTimeout, this, watchManager,
            getClientCnxnSocket(), canBeReadOnly);
    cnxn.start();
}

  由於鏈接是異步的,所以在使用客戶端時,要保證已鏈接成功。網絡

//若是已知會話id和密碼,能夠複用以前的鏈接
public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher,
        long sessionId, byte[] sessionPasswd, boolean canBeReadOnly,
        HostProvider aHostProvider) throws IOException {
    LOG.info("Initiating client connection, connectString=" + connectString
            + " sessionTimeout=" + sessionTimeout
            + " watcher=" + watcher
            + " sessionId=" + Long.toHexString(sessionId)
            + " sessionPasswd="
            + (sessionPasswd == null ? "<null>" : "<hidden>"));

    this.clientConfig = new ZKClientConfig();
    watchManager = defaultWatchManager();
    watchManager.defaultWatcher = watcher;
   
    ConnectStringParser connectStringParser = new ConnectStringParser(
            connectString);
    hostProvider = aHostProvider;

    cnxn = new ClientCnxn(connectStringParser.getChrootPath(),
            hostProvider, sessionTimeout, this, watchManager,
            getClientCnxnSocket(), sessionId, sessionPasswd, canBeReadOnly);
    cnxn.seenRwServerBefore = true; // since user has provided sessionId
    cnxn.start();
}
相關文章
相關標籤/搜索