Zookeeper构造函数

1

/*
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();
}


你可能感兴趣的:(Zookeeper构造函数)