zookeeper 读取节点及其下一级子节点信息

该代码示例展示了如何创建一个ZooKeeper客户端,连接到服务器,实现Watcher监听器以处理节点事件。主要功能包括检查连接状态,同步获取节点数据以及获取子节点列表,并设置监听器以便在节点变化时得到通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class GetNode implements Watcher{

    private static CountDownLatch countDownLatch = new CountDownLatch(1);

    private static ZooKeeper zooKeeper;

    public static void main(String[] args) throws IOException, InterruptedException {
        /**
         * 客户端可以通过创建一个zk实例来连接zk服务器
         * new Zookeeper(connectString,sessionTimeOut,Watcher)
         * connectString:连接地址:IP:端口
         * sessionTimeOut:会话超时时间:单位毫秒
         * Wather:监听器(当特定时间出发监听时,zk会通过watcher通知到客户端)
         */
        zooKeeper = new ZooKeeper("101.132.167.18:2181", 5000, new GetNode());
        System.out.println(zooKeeper.getState());
        //countDownLatch.await();
        System.out.println("客户端与服务端会话真正建立了");
        Thread.sleep(Integer.MAX_VALUE);
    }

    /**
     * 回调方法:处理来自服务器端的watcher通知
     */
    @Override
    public void process(WatchedEvent watchedEvent) {
        // SyncConnected
        if(watchedEvent.getState() == Watcher.Event.KeeperState.SyncConnected){
            //解除主程序在CountDownLatch上的等待阻塞
            //countDownLatch.countDown();
            System.out.println("process方法执行了......");
            try {
                getNoteSync();
                getChildrens();
            } catch (KeeperException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 读取节点信息
     */
    private void getNoteSync() throws KeeperException, InterruptedException {
        /**
         * path :  获取数据的路径
         * watch : 是否开启监听
         * stat : 节点状态信息
         * null : 表示获取最新版本的数据
         * zk.getData(path,watch,stat);
         */
        byte[] data = zooKeeper.getData("/persistent", false, null);
        System.out.println(new String(data));
    }
    /**
     * 获取某个子节点列表方法
     */
    private void getChildrens() throws KeeperException, InterruptedException {
        /**
         * path : 路径
         * watch : 是否要启动监听,当子节点列表发生变化,会出发监听
         * zooKeeper.getChildrens(path,watch);
         */
        List<String> children = zooKeeper.getChildren("/persistent",true);
        System.out.println(children);

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值