zk版本3.4.13 ,虚拟机版本CentOs7
在虚拟机做了集群,测试抛异常
Exception in thread "main" org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /test
at org.apache.zookeeper.KeeperException.create(KeeperException.java:102)
at org.apache.zookeeper.KeeperException.create(KeeperException.java:54)
at org.apache.zookeeper.ZooKeeper.getData(ZooKeeper.java:1221)
at com.along.client.zookeeper.ZookeeperClient.main(ZookeeperClient.java:21)
上面的代码对于避免连接建立完成之前就发出ZooKeeper操作命令出现ConnectionLoss是有用的。
因为new出ZooKeeper实例时只是建立了与服务端之间的会话,此时TCP连接可能还未建立完成,如果这时发出ZooKeeper操作命令的确会出现连接丢失异常,虽然这种概率相对较小。
当客户端与服务端连接建立之后客户端会收到一个SyncConnected事件,此时将CountDownLatch减到零就可以让阻塞的主线程继续运行,再来发出ZooKeeper操作命令就不会出现连接丢失的异常了。
package com.along.client.zookeeper;
import org.apache.zookeeper.KeeperException;
import org.apache.zook