美文网首页
ZooKeeper的API操作

ZooKeeper的API操作

作者: 羋学僧 | 来源:发表于2020-08-03 16:41 被阅读0次

ZooKeeper的API操作

方法 作用
create(path, data, flags) 创建一个 znode, path 是其路径,data 是存储在该 ZNode 上的数据, flags常用的有: PERSISTEN, PERSISTENT_SEQUENTAIL, EPHEMERAL, EPHEMERAL_SEQUENTAIL
delete(path, version) 删除一个 ZNode,可以通过 version 删除指定的版本, 如果 version 是 -1 的话,表示删除所有的版本
exists(path, watch) 判断指定 ZNode 是否存在,并设置是否 Watch 这个 ZNode。这里如果 要设置 Watcher 的话,Watcher是在创建 ZooKeeper 实例时 指定的,如 果要设置特定的 Watcher 的话,可以调用另一个重载版本的 exists(path, watcher)。以下几个带 watch 参数的 API 也都类似
getData(path, watch) 读取指定 ZNode 上的数据,并设置是否 watch 这个 ZNode
setData(path, watch) 更新指定 ZNode 的数据,并设置是否 Watch 这个 ZNode
getChildren(path, watch) 获取指定 ZNode 的所有子 ZNode 的名字,并设置是否 Watch 这个 ZNode
sync(path) 把所有在 sync 之前的更新操作都进行同步,达到每个请求都在半数以上 的 ZooKeeper Server上生效。path参数目前没有用
setAcl(path, acl) 设置指定 ZNode 的 Acl 信息
getAcl(path) 获取指定 ZNode 的 Acl 信息

导入Maven依赖

    <dependencies>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.10</version>
        </dependency>
    </dependencies>

基础信息设置

// 客户端去请求链接的时候的服务器链接地址信息
private static String connectString = "bigdata02:2181,bigdata03:2181,bigdata04:2181";

// 客户端去请求链接的超时时长
private static  int sessionTimeout = 4000;

// 节点名称,统一命名
private static String znode = "/zkTEST";

创建节点

    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
        // 建立 ZooKeeper 链接
        ZooKeeper zk = new ZooKeeper(connectString,sessionTimeout,null);
        System.out.println("==== " + zk + "====");
        // 创建 znode ,创建的时候,这个节点不能存在,存在会报错。
        String createdNode = zk.create(znode, "hello".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println(createdNode+"节点创建成功");

        zk.close();
    }

查看节点
    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
        // 建立 ZooKeeper 链接
        ZooKeeper zk = new ZooKeeper(connectString,sessionTimeout,null);
        System.out.println("==== " + zk + "====");
        // 查看节点
        byte[] data = zk.getData(znode, null, null);
        //打印出来了hello节点了。
        System.out.println(new String(data));

        zk.close();
    }

修改节点数据

    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
        // 建立 ZooKeeper 链接
        ZooKeeper zk = new ZooKeeper(connectString,sessionTimeout,null);
        System.out.println("==== " + zk + "====");
        // 修改节点数据 为hello2
        Stat setData = zk.setData(znode, "hello2".getBytes(), -1);
        System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(setData.getMtime())));
        byte[] data1 = zk.getData(znode, null, null);
        System.out.println(new String(data1));

        zk.close();
    }

判断节点是否存在

    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
        // 建立 ZooKeeper 链接
        ZooKeeper zk = new ZooKeeper(connectString,sessionTimeout,null);
        System.out.println("==== " + zk + "====");
        // 判断节点是否存在
        Stat exists = zk.exists(znode, null);
        System.out.println(null != exists?true:false);

        zk.close();
    }

获取子节点

    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
        // 建立 ZooKeeper 链接
        ZooKeeper zk = new ZooKeeper(connectString,sessionTimeout,null);
        System.out.println("==== " + zk + "====");
        // 获取子节点
        List<String> children = zk.getChildren("/", null);
        for(String child: children){
            System.out.println(child);
        }

        zk.close();
    }

删除节点

    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
        // 建立 ZooKeeper 链接
        ZooKeeper zk = new ZooKeeper(connectString,sessionTimeout,null);
        System.out.println("==== " + zk + "====");
        // 删除节点
        zk.delete(znode, -1);
        Stat exists1 = zk.exists(znode, null);
        System.out.println(null == exists1?"删除成功":"删除失败");

        zk.close();
    }

相关文章

网友评论

      本文标题:ZooKeeper的API操作

      本文链接:https://www.haomeiwen.com/subject/wxydrktx.html