zookeeper使用IDEA测试API出现KeeperException$ConnectionLossException解决思路


出现该异常主要从以下几个方面排查

  • 1.是否存在超时问题
  • 2.防火墙是否开放了对应的端口

1.是否存在超时问题
Watcher watcher = new Watcher() { public void process(WatchedEvent watchedEvent) { System.out.println("监听了" + watchedEvent.getPath()); } }; // 1.创建zookeeper连接 ZooKeeper zk = null; zk = new ZooKeeper("118.190.96.11:2181", 30000,watcher); System.out.println("获得连接:" + zk);

上述代码块中创造zookeeper实例的时候,在构造函数中的第二个参数是指定sessionTimeout的值,过小会导致出现超时问题,尽量设置大一点,超时问题就解决了。设置多少合适呢?
首先进入到服务器zookeeper安装路径下的bin目录下,然后输入命令:
zkCli.sh -server 118.190.96.11:2181

会得到以下信息
zookeeper使用IDEA测试API出现KeeperException$ConnectionLossException解决思路
文章图片

其中最重要的是:
Session establishment complete on server 118.190.96.11/118.190.96.11:2181, sessionid = 0x1000ee82130000a, negotiated timeout = 30000
可知zookeeper创建客户端默认的超时时间就是30000ms。我们使用默认的超时时间即可。
2.防火墙是否开放了对应的端口 首先要说明的是云服务器中配置的安全组并不是为防火墙开放了该端口,仍然需要自己配置。
zookeeper默认的端口是2181。所以我们看看防火墙是否开放了2181端口,输入命令
firewall-cmd --list-ports

zookeeper使用IDEA测试API出现KeeperException$ConnectionLossException解决思路
文章图片

这里面我已经配置过了。所以有2181这个端口。
配置过程如下
a.开放2181端口:
firewall-cmd --zone=public --add-port=2181/tcp --permanent

zookeeper使用IDEA测试API出现KeeperException$ConnectionLossException解决思路
文章图片

警告内容可忽略,因为配置过所以有这个提示。
b. 重启防火墙使上面的配置生效:
systemctl reload firewalld

zookeeper使用IDEA测试API出现KeeperException$ConnectionLossException解决思路
文章图片

代表重启成功。
c. 再次查看防火墙开放的端口。
【zookeeper使用IDEA测试API出现KeeperException$ConnectionLossException解决思路】IDEA运行后的截图
zookeeper使用IDEA测试API出现KeeperException$ConnectionLossException解决思路
文章图片

    推荐阅读