赞
踩
当使用Java操作Zookeeper客户端的时候,有时候会报
Exception in thread "main" org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /servers/server
百度中常见的方式就是关闭服务器的防火墙,或者开放端口
- # 禁用防火墙
- systemctl disable firewalld
- # 开放端口
- firewall-cmd --zone=public --add-port=2181/tcp --permanent
- firewall-cmd --zone=public --add-port=2888/tcp --permanent
- firewall-cmd --zone=public --add-port=3888/tcp --permanent
如果关闭防火墙或者开放端口这种方式还是不行,可以尝试调大Zookeeper的会话时间,因为它是心跳机制,也就是当一个zookeeper超过该时间没有心跳,则认为该节点故障。所以,如果会话时间值小于zookeeper的创建时间,则当zookeeper还未来得及创建连接,会话时间已到,因此抛出异常认为该节点故障了
我这里是增大为 30秒
- @Test
- public void test01() throws IOException, KeeperException, InterruptedException {
- //zookeeper服务器地址
- String connectString="192.168.58.134:2181";
- //设置会话时间,单位毫秒(增大为30秒)
- int sessionTimeout=30000;
- //创建Zookeeper连接
- ZooKeeper zk=new ZooKeeper(connectString, sessionTimeout, new Watcher() {
- @Override
- public void process(WatchedEvent watchedEvent) {
- System.out.println("事件触发:"+watchedEvent);
- }
- });
- //创建一个持久化节点
- zk.create("/app1","val".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。