栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

zookeeper系列之ZkClient开源客户端

zookeeper系列之ZkClient开源客户端

之前一篇文档讲的是直接使用ZK的API做数据节点的操作,但是代码重复度过高,而且代码还特别多,写和维护方面不太友好,所以这里面就有一个封装好了的工具jar包,这里面做个和下面文章中的案例一样的操作,对比一下,这里把集成API的文章再引入一下:

zookeeper系列之API讲解_阿小冰的博客-CSDN博客zookeeper系列之API讲解https://blog.csdn.net/qq_38377525/article/details/123327088


开源介绍

ZkClient是Github上的一个开源的zk客户端,是对远程的zk API进行了进一步的封装,比原生的代码更简单易用,同时还是先了很多Session超时重连、Watcher反复注册等功能,接下来咱们用ZkClient是先一下对Znode的操作


添加pom依赖

    com.101tec
    zkclient
    0.2

创建会话
public class CreateSession {
    public static void main(String[] args) {
        ZkClient zkClient=new ZkClient("127.0.0.1:2181");
        System.out.println("zk session created");
    }
}

日志打印结果:


创建节点
public class CreateNode {
    public static void main(String[] args) {
        ZkClient zkClient = new ZkClient("127.0.0.1:2181");
        //createParents的值设置为true,可以递归创建节点
        zkClient.createPersistent("/api-zkClient",true);
        System.out.println("znode success create ");
    }
}

日志打印结果:

可视化工具展示:


更新节点

可视化工具看一下修改之前的值:

修改代码如下:

public class UpdateNode {
    public static void main(String[] args) {
        ZkClient zkClient = new ZkClient("127.0.0.1:2181");
        //createParents的值设置为true,可以递归创建节点
        zkClient.writeData("/api-zkClient","I was updated");
        System.out.println("znode success update ");
    }
}

 修改之后的值:


 获取节点信息
public class GetNode {
    public static void main(String[] args) throws UnsupportedEncodingException {
        ZkClient zkClient = new ZkClient("127.0.0.1:2181");
        //createParents的值设置为true,可以递归创建节点
        boolean exists = zkClient.exists("/api-zkClient");
        if(exists){
            //存在就打印
            zkClient.setZkSerializer(new MyZkSerializer());
            Object data = zkClient.readData("/api-zkClient");
            System.out.println("znode success read :" + data);
        }else{
            System.out.println("znode fail read");
        }
    }
}

class MyZkSerializer implements ZkSerializer {
    //序列化,数据--》byte[]
    public byte[] serialize(Object o) throws ZkMarshallingError {
        return String.valueOf(o).getBytes();
    }
    //反序列化,byte[]--->数据
    public Object deserialize(byte[] bytes) throws ZkMarshallingError {
        return new String(bytes);
    }
}

日志打印结果:


获取子节点
public class GetChildren {
    public static void main(String[] args) {
        ZkClient zkClient = new ZkClient("127.0.0.1:2181");
        List children = zkClient.getChildren("/api-zkClient");
        System.out.println("znode child success add :"+children.size());
    }
}

日志打印结果:


删除节点

删除节点之前,先查看一下Znode Tree:

接下来我们就直接删除api-zkClient节点,附上代码:

public class DeleteNode {
    public static void main(String[] args) {
        ZkClient zkClient = new ZkClient("127.0.0.1:2181");
        zkClient.delete("/api-zkClient");
        System.out.println("znode success delete ");
    }
}

日志打印结果如下:

再看一下可视化工具的Tree:

 

到这里就证明,刚才的 api-zkClient已被删除


使用客户端工具比我们直接用原生的API接口要省力很多,其实这种封装zk的客户端除了ZkClient,还有其他的客户端,比如:Curator等等,感兴趣的童鞋可以自己百度搜索试一试,大同小异,主要还是对原生API的封装,建议大家还是对原生API先做一次了解,然后再结合来整理开源客户端

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/761733.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号