这里假设ip jar对应的版本 都匹配得上zookeeper服务器,防火墙也开了的情况下
然后,在运行中我执行下代码,发现有下述bug
这个可能是在未连接到zookeeper的情况下来执行的
第一种方法
于是加个判断
while(true){
if (ZooKeeper.States.CONNECTING == zkClient.getState()) {
Thread.sleep(1000);
}else {
break;
}
}
等建立连接后再执行对zookeeper服务器的各种操作,解决~
第二种方法
可以设置下zoo.cfg 配置文件,里面有个时间可以设置下
# 通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒
tickTime=2000
# 初始通信时限 Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量)
initLimit=10
# LF同步通信时限 Leader和Follower之间通信时间如果超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer
syncLimit=5
同样,也可以在java连接代码中增大sessionTimeout
ZooKeeper zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
}
});
在Curator框架也一样
CuratorFramework client = CuratorFrameworkFactory.builder()
.connectString("114.132.233.176:2181,114.132.233.176:2182,114.132.233.176:2183")
.connectionTimeoutMs(21000)
.sessionTimeoutMs(21000)
.retryPolicy(policy).build();