Zookeeper客户端zkClient和curator的操作

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 children = zkClient.getChildren("/zkClient"); System.out.println(children); zkClient.subscribeChildChanges("/zkClient", new IZkChildListener() { @Override public void handleChildChange(String parentPath, List 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) throwsException{ 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 = https://www.it610.com/article/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 = https://www.it610.com/article/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(); } }

最后一行代码会报错,原因是不能设置同样的数据版本。
【Zookeeper客户端zkClient和curator的操作】除了上述的两种zkclient和curatir的常用操作。还有一些其他操作都可以去尝试
代码的地址为https://github.com/zhendiao/deme-code/tree/main/zk
欢迎搜索关注本人与朋友共同开发的微信面经小程序【大厂面试助手】和公众号【微瞰技术】

    推荐阅读