Zookeeper连接后验证节点是否存在

  Zookeeper连接后验证节点是否存在

  初学Zookeeper,在配置完集群之后,为了验证集群对于某台机器挂掉之后的影响,出现了一下问题。

  集群由3台机器组成,通过“sh bin/zkServer.sh stop”关闭了其中一台(ip1)。

  然后在以下代码中测试:

        // 创建一个与服务器的连接
        ZooKeeper zk = new ZooKeeper("ip1:2189,ip2:2189,ip3:2189", 1000, new Watcher() {
            // 监控所有被触发的事件
            @Override
            public void process(WatchedEvent event) {
                System.out.println("已经触发了" + event.getType() + "事件!");
            }
        });
        // 取出子目录节点列表
        System.out.println(zk.getChildren("/testRootPath", true));
        // 关闭连接
        zk.close();

  经过测试,偶尔会出现以下异常:

Exception in thread "main" org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /testRootPath
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
    at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1468)
    at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1496)

  而上述代码在集群完全正常时是毫无问题的。

  Zookeeper连接后,此处的State应当是CONECTING。连接中的时候去验证是否存在节点会报错。解决的方法也很简单,就是等到Zookeeper客户端以及完全连接上服务器,State为CONECTED之后再进行其他操作。

  修改后代码如下:

        final CountDownLatch connectedSignal = new CountDownLatch(1);

        // 创建一个与服务器的连接
        ZooKeeper zk = new ZooKeeper("ip1:2189,ip2:2189,ip3:2189", 1000, new Watcher() {
            // 监控所有被触发的事件
            @Override
            public void process(WatchedEvent event) {
                System.out.println("已经触发了" + event.getType() + "事件!");
                if (event.getState() == KeeperState.SyncConnected) {
                    connectedSignal.countDown(); // 倒数-1
                }
            }
        });
        // 等待连接完成
        connectedSignal.await();

        // 取出子目录节点列表
        System.out.println(zk.getChildren("/testRootPath", true));

        // 关闭连接
        zk.close();

Zookeeper连接后验证节点是否存在

时间: 2024-08-28 19:25:01

Zookeeper连接后验证节点是否存在的相关文章

记hbase list 命令报错zookeeper连接失败

hbase list 命令报错:zookeeper exists failed after 4 attempts $telnet h0082161 2181 Connected to 172.16.82.161.Escape character is '^]'. telnet connect by close foreign. 此时发现telnet h0082161 其他端口均正常,其他机器telnet h0082161 2181正常, 此时进入一个误区,一直在围绕telnet 服务查看,查看/

解决升级SQL Server时遇到[报表服务器数据库未处于支持的兼容性级别或者无法建立连接]规则验证不通过问题

PS:标题有点长…… 在将SQL Server 2008 R2升级到SQL Server 2014时,遇到如下的规则验证错误: RS_ValidDatabaseVersion 检查该版本的报表服务器数据库能否由 Microsoft SQL Server 2014 报表服务器使用. 失败 报表服务器数据库未处于支持的兼容性级别或者无法建立连接.请使用 Reporting Services 配置管理器验证报表服务器配置,并且使用 SQL Server 管理工具验证兼容性级别. 具体提示信息可能是:有

远程连接身份验证错误,又找不到加密Oracle修正

远程连接服务器出现了错误,错误信息为:远程连接身份验证错误,又找不到加密Oracle修正. 服务器系统:Windows Server2016 客户端系统:Windows10家庭版和专业版 出错原因:Windows的的CVE-2018-0886 的 CredSSP 更新将CredSSP 身份验证协议默认设置成了"缓解",之前为"易受攻击". 解决方法: 1.WIN+R,输入gpedit.msc,进入组策略管理 选择计算机配置>管理模板>系统>凭据分配

Lambda 验证节点正式接入主网公告

各位节点朋友们: 目前主网申请映射总量已经超过200PB .各位节点可以正式进行主网验证节点接入工作,操作流程如下: 1.已经在质押系统添加节点主网映射地址的节点将会收到少量的主网 LAMB 及 TBB 进行验证节点钱包验证及测试. 2.各节点在通过Lambda主网钱包查询收到用来验证钱包的LAMB及TBB后,请将收到的资产打到指定地址:lambda13zade3vrptrm5ud7lr9epu8rjval33haptcerl 3.将少量的用来测试的LAMB及TBB打到指定地址后,可在浏览器中进

HiveServer2中使用jdbc访问hbase时导致ZooKeeper连接持续增加的解决

最近在监控中发现HiveServer2连接到zookeeper里的连接持续上涨,很奇怪,虽然知道HiveServer2支持并发连接,使用ZooKeeper来管理Hive表的读写锁,但我们的环境并不需要这些,我们已经关闭并发功能,以下是线上的配置,甚至把这些值都改成final了. 但是zookeeper连接依然会涨.后来想想,我们要访问的表是hive去映射的hbase,hiveserver2什么时候去连接zookeeper,它连接zookeeper干么,先从日志下手,将线上日志级别改为了debug

【笔记】处理ssh 连接后一段时间就掉线 Connection closed by foreign host

[写在前面] 写这篇博文的原因是我遇到一个"ssh 连接后一段时间就掉线 Connection closed by foreign host"的问题,因为这个压根就不是VMware.Linux操作系统及ssh问题,最后原因是因为ESET防毒软体的IDS防护导致的--,纠结了我长达半个月的时间,痛苦的经历记录下来方便后续解决其他问题时参考,也希望能给其他人一点启发. [问题场景] 开始上课的时候,在VMware中安装RHEL7.2系统,完成后按照SOP做快照.做克隆--,一切都感觉很顺利

mac远程桌面连接windows 8.1 update,提示: 远程桌面连接无法验证您希望连接的计算机的身份

在网上找到解决方案: SolutionEnable RDP security layer in Group Policy on the machine: Verify that the firewall allows remote desktop connections with RDP (Port 3389)Click Start>RunType gpedit.msc and click "OK"Result: The Group Policy Editor will open

textbox填入后验证输入的合法或根据输入的内容失去焦点后立即得出其他信息

<x:SimpleForm ID="SimpleForm1" runat="server" EnableBackgroundColor="true" ShowBorder="False" BodyPadding="2px" ShowHeader="False"> <Items> <x:Panel ID="Panel3" ShowHeade

Zookeeper连接重试设置

在ZKUtil.java中: public static RecoverableZooKeeper connect(Configuration conf, String ensemble, Watcher watcher, final String identifier) throws IOException { if(ensemble == null) { throw new IOException("Unable to determine ZooKeeper ensemble");