Zookeeper ZkClient使用介绍

2023-01-21 0 878

目录

前言

接下来,还是从创建会话、创建节点、读取数据、更新数据、删除节点等方面来介绍如何使用zkClient 这个zookeeper客户端

添加依赖:

在pom.xml⽂件中添加如下内容

<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.2</version>
</dependency>

1、创建会话

使⽤ZkClient可以轻松的创建会话,连接到服务端

package com.lagou.zkClient;
import org.I0Itec.zkclient.ZkClient;
public class CreateSession {
    /*
        借助zkClient完成会话创建
     */
    public static void main(String[] args) {
        /**
         * 创建一个zkClient实例就可以完成连接,完成会话的创建
         * serverString : 服务器连接地址
         * 注意:zkClient通过对zookeeperAPI内部封装,将这个异步创建会话的过程同步化了
         */
        ZkClient zkClient = new ZkClient(\"127.0.0.1:2181\");
        System.out.println(\"会话被创建了...\");
    }
}

2、创建节点

ZkClient提供了递归创建节点的接口,即其帮助开发者先完成父节点的创建,再创建子节点

package com.lagou.zkClient;
import org.I0Itec.zkclient.ZkClient;
public class CreateNote {
    /*
        借助zkClient完成会话创建
     */
    public static void main(String[] args) {
        /**
         * 创建一个zkClient实例就可以完成连接,完成会话的创建
         * serverString : 服务器连接地址
         * 注意:zkClient通过对zookeeperAPI内部封装,将这个异步创建会话的过程同步化了
         */
        ZkClient zkClient = new ZkClient(\"127.0.0.1:2181\");
        System.out.println(\"会话被创建了...\");
        // 创建节点
        /**
         *  createParents:是否要创建父节点,如果值为true,则就会递归创建节点
         */
        zkClient.createPersistent(\"/lg-zkClient/lg-c1\", true);
        System.out.println(\"节点递归创建完成\");
    }
}

值得注意的是,在原生态接口中是无法创建成功的(⽗节点不存在),但是通过ZkClient通过设置createParents参数为true可以递归的先创建父节点,再创建子节点

3、删除节点

ZkClient提供了递归删除节点的接口,即其帮助开发者先删除所有子节点(存在),再删除父节点

package com.lagou.zkClient;
import org.I0Itec.zkclient.ZkClient;
public class DeleteNote {
    /*
        借助zkClient完成会话创建
     */
    public static void main(String[] args) {
        /**
         * 创建一个zkClient实例就可以完成连接,完成会话的创建
         * serverString : 服务器连接地址
         * 注意:zkClient通过对zookeeperAPI内部封装,将这个异步创建会话的过程同步化了
         */
        ZkClient zkClient = new ZkClient(\"127.0.0.1:2181\");
        System.out.println(\"会话被创建了...\");
        // 递归删除子节点
        String path = \"/lg-zkClient/lg-c1\";
        zkClient.createPersistent(path+\"/c11\");
        zkClient.deleteRecursive(path);
        System.out.println(\"递归删除成功\");
    }
}

结果表明ZkClient可直接删除带子节点的⽗节点,因为其底层先删除其所有子节点,然后再删除父节点

4、获取子节点

package com.lagou.zkClient;
import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.ZkClient;
import java.util.List;
public class Get_NoteChildren {
    /*
        借助zkClient完成会话创建
     */
    public static void main(String[] args) throws InterruptedException {
        /**
         * 创建一个zkClient实例就可以完成连接,完成会话的创建
         * serverString : 服务器连接地址
         * 注意:zkClient通过对zookeeperAPI内部封装,将这个异步创建会话的过程同步化了
         */
        ZkClient zkClient = new ZkClient(\"127.0.0.1:2181\");
        System.out.println(\"会话被创建了...\");
        // 获取子节点列表
        List<String> children = zkClient.getChildren(\"/lg-zkClient\");
        System.out.println(children);
        // 注册监听对象
        /*
            客户端可以对一个不存在的节点进行子节点变更的监听
            只要该节点的子节点的列表发生变化,或者该节点本身被创建或则删除,都会触发监听
         */
        zkClient.subscribeChildChanges(\"/lg-zkClient-get\", new IZkChildListener() {
            /**
             * @param list : 变化后的子节点列表
             */
            @Override
            public void handleChildChange(String parentPath, List<String> list) throws Exception {
                System.out.println(parentPath + \"的子节点列表发生了变化,变化后的子节点列表为\" + list);
            }
        });
        // 测试
        zkClient.createPersistent(\"/lg-zkClient-get\");
        Thread.sleep(1000);
        zkClient.createPersistent(\"/lg-zkClient-get/c1\");
        Thread.sleep(1000);
    }
}

结果表明:客户端可以对⼀个不存在的节点进行子节点变更的监听。⼀旦客户端对⼀个节点注册了子节点列表变更监听之后,那么当该节点的子节点列表发生变更时,服务端都会通知客户端,并将最新的子节点列表发送给客户端,该节点本身的创建或删除也会通知到客户端。

5、获取数据(节点是否存在、更新、删除)

package com.lagou.zkClient;
import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;
public class Note_API {
    /*
        借助zkClient完成会话创建
     */
    public static void main(String[] args) throws InterruptedException {
        /**
         * 创建一个zkClient实例就可以完成连接,完成会话的创建
         * serverString : 服务器连接地址
         * 注意:zkClient通过对zookeeperAPI内部封装,将这个异步创建会话的过程同步化了
         */
        ZkClient zkClient = new ZkClient(\"127.0.0.1:2181\");
        System.out.println(\"会话被创建了...\");
        // 创建节点
        /**
         *  createParents:是否要创建父节点,如果值为true,则就会递归创建节点
         */
        zkClient.createPersistent(\"/lg-zkClient/lg-c1\", true);
        System.out.println(\"节点递归创建完成\");
        // 判断节点是否存在
        String path = \"/lg-zkClient-Ep\";
        boolean exists = zkClient.exists(path);
        if (!exists) {
            // 创建临时节点
            zkClient.createEphemeral(path, \"123\");
        }
        // 读取节点内容
        Object o = zkClient.readData(path);
        System.out.println(o);
        // 注册监听
        zkClient.subscribeDataChanges(path, new IZkDataListener() {
            /*
                当节点数据内容发生变化时,执行的回调方法
                s : path
                o : 变化后的节点内容
             */
            @Override
            public void handleDataChange(String s, Object o) throws Exception {
                System.out.println(s + \":该节点内容被更新,更新后的内容:\" + o);
            }
            /*
                当节点被删除时,会执行的回调方法
                s : path
             */
            @Override
            public void handleDataDeleted(String s) throws Exception {
                System.out.println(s + \":该节点被删除\");
            }
        });
        // 更新节点内容
        zkClient.writeData(path, \"456\");
        Thread.sleep(2000);
        // 删除节点
        zkClient.delete(path);
        Thread.sleep(2000);
    }
}

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 Zookeeper ZkClient使用介绍 https://www.20zxx.cn/463789/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务