测试代码如下:
public class ZKClient {
String connectString ="47.98.183.176:2181"; //ZKip地址+客户端通信端口号
int sessionTimeOut = 10000; //会话超时时间,该时间内,如果没有连接成功,则超时
ZooKeeper zkClient;
@Test
public void createZnode() throws KeeperException, InterruptedException, IOException {
zkClient = new ZooKeeper(connectString, sessionTimeOut, (watchedEvent) -> { });
String s =
zkClient.create("/lol", "league of lengend".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
}
报错信息如下:
网上解决方案:
- 关闭防火墙;
- jar包版本与ZK版本不一致;
本次解决方案:
扩大会话超时时间设置。
根据zk配置文件发现,zk每次通信时间默认是2000毫秒,即2秒,首次初始化时,通信时限时10次心跳。如果在设置的会话之间内,zk并没有完成初始化创建,则会提示连接失败,节点故障。所以只要将会话超时时间设置为10*2000,则必定创建成功。
更新后的代码即运行结果: