美文网首页
Zookeeper客户端zkClient和curator的操作

Zookeeper客户端zkClient和curator的操作

作者: 赵镇 | 来源:发表于2021-06-25 23:03 被阅读0次

    zkClient操作

    基本增删改查代码如下

    public class createSession {
        public static void main(String[] args) {
            ZkClient zkClient = new ZkClient("119.45.52.68:2181");
            System.out.println("connect success");
        }
    }
    
    public class CreateNode {
    
        public static void main(String[] args) {
            ZkClient zkClient = new ZkClient("119.45.52.68:2181");
            System.out.println("connect success");
            //true代表可以递归创建目录
            zkClient.createPersistent("/zkclient/persistent/children",true);
            System.out.println("create node success");
        }
    }
    
    public class DeleteNode {
        public static void main(String[] args) {
            ZkClient zkClient = new ZkClient("119.45.52.68:2181");
            zkClient.deleteRecursive("/zkclient");
            System.out.println("success delete node");
        }
    }
    
    public class GetChildrenChanged {
        public static void main(String[] args) throws Exception{
            ZkClient zkClient = new ZkClient("119.45.52.68:2181");
            zkClient.createPersistent("/zkClient");
            Thread.sleep(1000);
            List<String> children = zkClient.getChildren("/zkClient");
            System.out.println(children);
            zkClient.subscribeChildChanges("/zkClient", new IZkChildListener() {
                @Override
                public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
                    System.out.println("父路径"+parentPath+"当前子路径的"+currentChilds);
                }
            });
            zkClient.createPersistent("/zkClient/child1");
            Thread.sleep(1000);
            zkClient.delete("/zkClient/child1");
            Thread.sleep(Integer.MAX_VALUE);
        }
    }
    
    public class GetNodeData {
        public static void main(String[] args) throws Exception{
            String path = "/zkclient-node";
            ZkClient zkClient = new ZkClient("119.45.52.68:2181");
            boolean exist = zkClient.exists(path);
            if (!exist){
                zkClient.createEphemeral(path,"123");
            }
            zkClient.subscribeDataChanges(path, new IZkDataListener() {
                @Override
                public void handleDataChange(String dataPath, Object data) throws Exception {
                    System.out.println(dataPath+"节点内容被更新"+data);
                }
    
                @Override
                public void handleDataDeleted(String dataPath) throws Exception {
                    System.out.println(dataPath+"节点内容被删除");
    
                }
            });
            Object o = zkClient.readData(path);
            System.out.println(o);
    
            zkClient.writeData(path,"4567");
            Thread.sleep(2000);
    
            zkClient.delete(path);
            Thread.sleep(2000);
        }
    }
    
    

    curator操作api使用

    public class CreateSession {
        public static void main(String[] args) {
            //curator第一种创建回话方式
            RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3);
            CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient("119.45.52.68:2181",
                    5000,3000,retryPolicy);
            curatorFramework.start();
            System.out.println("create session success");
            //第二种方式
            CuratorFramework client =CuratorFrameworkFactory.builder()
                    .connectString("119.45.52.68:2181")
                    .sessionTimeoutMs(5000)
                    .sessionTimeoutMs(3000)
                    .retryPolicy(retryPolicy)
                    .namespace("base")
                    .build();
            client.start();
            System.out.println("createe session2 success ");
        }
    }
    
    
    public class CreateNode {
        public static void main(String[] args) throws  Exception{
            RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3);
            CuratorFramework client = CuratorFrameworkFactory.builder()
                    .connectString("119.45.52.68:2181")
                    .sessionTimeoutMs(5000)
                    .sessionTimeoutMs(3000)
                    .retryPolicy(retryPolicy)
                    //.namespace("base")
                    .build();
            client.start();
            String path = "/curator/child1";
            client.create().creatingParentContainersIfNeeded()
                    .withMode(CreateMode.PERSISTENT)
                    .forPath(path,"init".getBytes());
            System.out.println("success create node");
        }
    }
    
    
    public class DeleteNode {
        public static void main(String[] args) throws Exception{
            RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3);
            CuratorFramework client = CuratorFrameworkFactory.builder()
                    .connectString("119.45.52.68:2181")
                    .sessionTimeoutMs(5000)
                    .sessionTimeoutMs(3000)
                    .retryPolicy(retryPolicy)
                    //.namespace("base")
                    .build();
            client.start();
            String path = "/curator";
            client.delete().deletingChildrenIfNeeded().withVersion(-1).forPath(path);
            System.out.println("delete node success ");
        }
    }
    
    
    public class GetNodeData {
        public static void main(String[] args) throws Exception{
            RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3);
            CuratorFramework client = CuratorFrameworkFactory.builder()
                    .connectString("119.45.52.68:2181")
                    .sessionTimeoutMs(5000)
                    .sessionTimeoutMs(3000)
                    .retryPolicy(retryPolicy)
                    //.namespace("base")
                    .build();
            client.start();
            String path = "/curator/child1";
            client.create().creatingParentContainersIfNeeded()
                    .withMode(CreateMode.PERSISTENT)
                    .forPath(path,"init".getBytes());
            System.out.println("success create node");
            Stat stat = new Stat();
            byte [] data = client.getData().storingStatIn(stat).forPath(path);
            System.out.println("数据为"+new String(data));
        }
    }
    
    
    public class UpdateNodeData {
        public static void main(String[] args) throws Exception{
            RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3);
            CuratorFramework client = CuratorFrameworkFactory.builder()
                    .connectString("119.45.52.68:2181")
                    .sessionTimeoutMs(5000)
                    .sessionTimeoutMs(3000)
                    .retryPolicy(retryPolicy)
                    //.namespace("base")
                    .build();
            client.start();
            String path = "/curator/child1";
    //        client.create().creatingParentContainersIfNeeded()
    //                .withMode(CreateMode.PERSISTENT)
    //                .forPath(path,"init".getBytes());
    //        System.out.println("success create node");
            Stat stat = new Stat();
            byte [] data = client.getData().storingStatIn(stat).forPath(path);
            System.out.println("数据为"+new String(data));
    
            int version = client.setData().withVersion(stat.getVersion()).forPath(path).getVersion();
            System.out.println("update node "+path+" version "+version);
            client.setData().withVersion(stat.getVersion()).forPath(path).getAversion();
        }
    }
    
    

    最后一行代码会报错,原因是不能设置同样的数据版本。

    除了上述的两种zkclient和curatir的常用操作。还有一些其他操作都可以去尝试
    代码的地址为https://github.com/zhendiao/deme-code/tree/main/zk

    欢迎关注和点赞,以及总结的分类面试题https://github.com/zhendiao/JavaInterview

    相关文章

      网友评论

          本文标题:Zookeeper客户端zkClient和curator的操作

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