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依赖

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

创建会话

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<String> 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先做一次了解,然后再结合来整理开源客户端

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值