完美解决Java操作Zookeeper API报错问题

当使用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);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值