JavaAPI操作Zookeeper连接报错

本文介绍了在Java中使用ZooKeeper时遇到的连接超时错误,以及如何通过增加会话超时时间来解决这个问题。测试代码显示了如何创建ZooKeeper实例,并在创建节点时遇到超时。报错信息表明可能的原因包括防火墙限制和不匹配的ZooKeeper版本。解决方案是将会话超时时间设置为10倍的ZK通信时间(2000毫秒),确保在10次心跳周期内完成初始化。更新代码并应用新设置后,成功创建Znode。
摘要由CSDN通过智能技术生成

测试代码如下:

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);
    }
}

报错信息如下:

在这里插入图片描述

网上解决方案:

  1. 关闭防火墙;
  2. jar包版本与ZK版本不一致;

本次解决方案:

扩大会话超时时间设置。

根据zk配置文件发现,zk每次通信时间默认是2000毫秒,即2秒,首次初始化时,通信时限时10次心跳。如果在设置的会话之间内,zk并没有完成初始化创建,则会提示连接失败,节点故障。所以只要将会话超时时间设置为10*2000,则必定创建成功。

更新后的代码即运行结果:

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值