ZKClient操作zookeeper

  前面简单研究了curator的使用,下面简单研究zkclient的使用。

1.创建连接

    private static final String CONNECT_ADDR = "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183";

    private static ZkClient geneClient() {
        return new ZkClient(new ZkConnection(CONNECT_ADDR), 10000);
    }

创建客户端的方法: ZKClient(Arguments)
参数1:zkServer zookeeper服务器的地址,用","分割
参数2:sessionTimeout超时回话,为毫秒,默认是30000ms
参数3:connectionTimeOut 连接超时会话
参数4:IZKConnection接口的实现类
参数5:zkSerializer 兹定于序列化实现

2.简单操作

1.创建节点

  可以递归创建节点,只不过递归创建的节点值为空。

        // 创建节点
        geneClient.create("/test1", "sssss", CreateMode.PERSISTENT);
        // 递归创建节点,只是节点的值为空
        geneClient.createPersistent("/test2/t22", true);

结果

 创建方法如下:

 2.删除节点

  可以递归删除节点。

        boolean delete = geneClient.delete("/test1");
        // 递归删除
        boolean deleteRecursive = geneClient.deleteRecursive("/test2");

 3.获取节点内容和遍历子节点

        Object readData = geneClient.readData("/test1");
        System.out.println(readData);

        List<String> list = geneClient.getChildren("/test2");
        for (String p : list) {
            System.out.println(p);
            String rp = "/test2/" + p;
            String data = geneClient.readData(rp);
            System.out.println("节点为:" + rp + ",内容为: " + data);
        }

 4.判断节点是否存在

    boolean exists = geneClient.exists("/test1");
    System.out.println(exists);

5.修改节点

        Stat writeData = geneClient.writeData("/test1", "cccc");
        System.out.println(writeData);
        System.out.println(geneClient.readData("/test1"));

3.监听节点

1.监听节点变化

        geneClient.subscribeDataChanges("/test1", new IZkDataListener() {

            @Override
            public void handleDataDeleted(String dataPath) throws Exception {
                System.out.println("节点被删除");
            }

            @Override
            public void handleDataChange(String dataPath, Object data) throws Exception {
                System.out.println(dataPath + "\t" + data);
            }
        });

2.监听子节点变化(只能监听字节点,子孙节点无效)

        geneClient.subscribeChildChanges("/test1", new IZkChildListener() {
            @Override
            public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
                System.out.println(parentPath+"\t");
                for(String s:currentChilds){
                    System.out.println(s);
                }
            }
        });

猜你喜欢

转载自www.cnblogs.com/qlqwjy/p/10545166.html