Zookeeper客户端API之读取子节点列表(八)

简介: Zookeeper客户端API之读取子节点列表(八)

本篇博客介绍一下Zookeeper原生客户端API提供的获取子节点列表方法。

获取子节点列表方法

方法

Zookeeper原生客户端API提供了以下8中获取子节点列表的方法,每个方法的使用说明参考注释内容:

/**
 * 返回指定路径下面的子节点列表。
 * 如果watcher不为null,并且调用成功(没有异常),会将watcher注册在指定的path
 * 上。当path(父节点)被删除或者path下面创建/删除子节点,将触发通知watcher。
 * 
 * 返回结果列表不保证有序性。
 */
public List<String> getChildren(final String path, Watcher watcher)
/**
 * 使用说明同上一个方法。
 */
public List<String> getChildren(String path, boolean watch)
/**
 * getChildren(String, Watcher)的异步版本
 */
public void getChildren(final String path, Watcher watcher,
            ChildrenCallback cb, Object ctx)
/**
 * getChildren(String, boolean)的异步版本
 */
public void getChildren(String path, boolean watch, ChildrenCallback cb,
            Object ctx)
/**
 * 为指定的路径返回stat和子节点列表。
 * 
 */
public List<String> getChildren(final String path, Watcher watcher,
            Stat stat)
/**
 * 使用说明同上一个方法。
 */
public List<String> getChildren(String path, boolean watch, Stat stat)
/**
 * getChildren(String, Watcher, Stat)的异步版本
 */
public void getChildren(final String path, Watcher watcher,
            Children2Callback cb, Object ctx)
/**
 * getChildren(String, boolean, Stat)的异步版本
 */
public void getChildren(String path, boolean watch, Children2Callback cb,
            Object ctx)

参数说明

参数名 说明

path 指定数据节点的路径,获取该节点下面的子节点

watcher 注册在path上的Watcher。path被删除或者path下面的创建/删除节点,向客户端发送通知。可为null

watch 表示是否需要注册一个watcher。true:注册默认watcher,false:不需要注册watcher

cb 注册一个异步的回调函数

ctx 用户传递信息

stat 指定数据节点状态信息。传入旧stat,方法执行过程中会将其替换为新stat对象。

具体案例


package com.secbro.learn;
import org.apache.zookeeper.*;
import java.util.List;
import java.util.concurrent.CountDownLatch;
/**
 * 获得子节点列表的方法
 * Created by zhuzs on 2017/3/26.
 */
public class TestGetChildrenMethod implements Watcher {
    private static CountDownLatch countDownLatch = new CountDownLatch(1);
    private static ZooKeeper zooKeeper;
    public static void main(String[] args) throws Exception {
        zooKeeper = new ZooKeeper("127.0.0.1:2181", 5000, new TestGetChildrenMethod());
        countDownLatch.await();
        // 创建父节点/test
        zooKeeper.create("/test", "123".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        // 在父节点/test下面创建a1节点
        zooKeeper.create("/test/a1", "456".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
        // 同步获得结果
        List<String> childrenList = zooKeeper.getChildren("/test", true);
        System.out.println("同步getChildren获得数据结果:" + childrenList);
        // 异步获得结果
        zooKeeper.getChildren("/test",true,new MyChildren2Callback(),null);
        // 在父节点/test下面创建a2节点
        zooKeeper.create("/test/a2", "456".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
        Thread.sleep(10000);
    }
    public void process(WatchedEvent event) {
        if (Event.KeeperState.SyncConnected == event.getState()) {
            if(Event.EventType.None == event.getType() && null == event.getPath()){ // 连接时的监听事件
                countDownLatch.countDown();
            } else if (event.getType() == Event.EventType.NodeChildrenChanged){ // 子节点变更时的监听
                try {
                    System.out.println("重新获得Children,并注册监听:" + zooKeeper.getChildren(event.getPath(),true));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
class MyChildren2Callback implements AsyncCallback.Children2Callback{
    public void processResult(int rc, String path, Object ctx, List<String> children, Stat stat) {
        System.out.println("异步获得getChildren结果,rc=" + rc
                + ";path=" + path + ";ctx=" + ctx + ";children=" + children +";stat=" + stat);
    }
}

输出结果:


同步getChildren获得数据结果:[a1]

异步获得getChildren结果,rc=0;path=/test;ctx=null;children=[a1];stat=14277,14277,1490498559704,1490498559704,0,1,0,0,3,1,14278


重新获得Children,并注册监听:[a1, a2]


上面的例子,先创建了一个父节点test,然后在其下面创建了a1子节点,并注册监听。当父节点test下面创建了新的a2子节点之后,监听事件触发。但此时需要重新主动获取该父节点下面的子节点,并继续注册监听事件。


上面只提供了新增子节点的案例,其实删除子节点或删除父节点同样会触发监听事件。


目录
相关文章
|
5月前
|
JSON 安全 API
亚马逊商品列表API秘籍!轻松获取商品列表数据
亚马逊商品列表API(SP-API)提供标准化接口,支持通过关键词、分类、价格等条件搜索商品,获取ASIN、价格、销量等信息。采用OAuth 2.0认证与AWS签名,保障安全。数据以JSON格式传输,便于开发者批量获取与分析。
|
5月前
|
数据采集 JSON API
微店API使用指南:高效获取商品列表数据
本文介绍如何使用Python爬虫调用微店item_search接口,根据关键词搜索商品并获取商品列表数据,涵盖请求方式、JSON数据解析、分页参数设置及筛选排序功能,适用于电商数据分析与竞品研究。
|
5月前
|
JSON 监控 API
从0到1掌握京东API:商品列表获取技巧与避坑指南
京东商品列表API是京东开放平台的核心接口,支持按类目、价格、销量等多条件筛选,实时获取商品基础信息、价格、库存及促销数据。采用HTTPS协议,JSON格式返回,适用于竞品分析与价格监控。支持分页,通过MD5签名认证,保障数据安全。
|
5月前
|
API 微服务
阿里云微服务引擎 MSE 及 API 网关 2025 年 9 月产品动态
阿里云微服务引擎 MSE 及 API 网关 2025 年 9 月产品动态。
512 49
|
6月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2025 年 9 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
554 142
|
6月前
|
监控 算法 API
亚马逊商品列表API开发指南
亚马逊商品列表API助力开发者批量获取商品数据,支持市场分析、竞品监控与推荐系统。涵盖商品信息、价格、库存等,提供Python调用示例,快速接入。
|
6月前
|
JSON 监控 API
速卖通商品列表API秘籍!轻松获取商品列表数据
速卖通商品列表API支持关键词搜索、分类筛选、多语言返回及分页排序功能,适用于比价系统、库存监控、市场研究等场景。开发者可快速获取商品数据,构建自动化应用。
|
6月前
|
数据采集 JSON API
微店商品列表API接口开发指南:从零到实战
微店商品列表API(vdian.shop.item.list.get)用于获取店铺商品数据,支持分页、签名认证,返回JSON格式。适用于商品同步、竞品分析、多平台展示及数据清洗。提供Python请求示例,便于快速接入。
API 微服务
164 0
|
6月前
|
监控 算法 API
1688商品列表API数据解析
1688商品列表API支持通过关键词、价格、类目筛选商品,适用于电商分析与竞品监控,提供分钟级更新与高并发能力。支持批量获取商品信息、分页查询,附Python调用示例及完整错误处理逻辑。