当前位置:   article > 正文

完美解决Java操作Zookeeper API报错问题_java zk报错 keepererrorcode = session

java zk报错 keepererrorcode = session

当使用Java操作Zookeeper客户端的时候,有时候会报

Exception in thread "main" org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /servers/server

百度中常见的方式就是关闭服务器的防火墙,或者开放端口

  1. # 禁用防火墙
  2. systemctl disable firewalld
  3. # 开放端口
  4. firewall-cmd --zone=public --add-port=2181/tcp --permanent
  5. firewall-cmd --zone=public --add-port=2888/tcp --permanent
  6. firewall-cmd --zone=public --add-port=3888/tcp --permanent

如果关闭防火墙或者开放端口这种方式还是不行,可以尝试调大Zookeeper的会话时间,因为它是心跳机制,也就是当一个zookeeper超过该时间没有心跳,则认为该节点故障。所以,如果会话时间值小于zookeeper的创建时间,则当zookeeper还未来得及创建连接,会话时间已到,因此抛出异常认为该节点故障了

我这里是增大为 30秒

  1. @Test
  2. public void test01() throws IOException, KeeperException, InterruptedException {
  3. //zookeeper服务器地址
  4. String connectString="192.168.58.134:2181";
  5. //设置会话时间,单位毫秒(增大为30秒)
  6. int sessionTimeout=30000;
  7. //创建Zookeeper连接
  8. ZooKeeper zk=new ZooKeeper(connectString, sessionTimeout, new Watcher() {
  9. @Override
  10. public void process(WatchedEvent watchedEvent) {
  11. System.out.println("事件触发:"+watchedEvent);
  12. }
  13. });
  14. //创建一个持久化节点
  15. zk.create("/app1","val".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  16. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/733600
推荐阅读
相关标签
  

闽ICP备14008679号