zookeeper javaAPI
ZooKeeper(String connectionString, int sessionTimeout, Watcher watcher)
2、新增节点
// 同步方式 create(String path, byte[] data, List<ACL> acl, CreateMode createMode) // 异步方式 create(String path, byte[] data, List<ACL> acl, CreateMode createMode, AsyncCallback.StringCallback callBack,Object ctx)
3、更新节点
// 同步方式 setData(String path, byte[] data, int version) // 异步方式 setData(String path, byte[] data, int version,AsyncCallback.StatCallback callBack, Object ctx)
4、删除节点
// 同步方式 delete(String path, int version) // 异步方式 delete(String path, int version, AsyncCallback.VoidCallback callBack, Object ctx)
5、查看节点
// 同步方式 getData(String path, boolean b, Stat stat) // 异步方式 getData(String path, boolean b,AsyncCallback.DataCallback callBack, Object ctx)
6、查看子节点
// 同步方式 getChildren(String path, boolean b) // 异步方式 getChildren(String path, boolean b,AsyncCallback.ChildrenCallback callBack,Object ctx)
7、检查节点是否存在
// 同步方法 exists(String path, boolean b) // 异步方法 exists(String path, boolean b,AsyncCallback.StatCallback callBack,Object ctx)
综合案列
使用 zookeeper 原生 API,连接需要时间,用 countDownLatch 阻塞,等待连接成功,控制台输出连接状态!
package com.wfj.zookeeper; import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat; import java.util.List; import java.util.concurrent.CountDownLatch; public class ZookeeperAPI { public static void main(String[] args) { try { // 计数器对象 CountDownLatch countDownLatch = new CountDownLatch(1); // arg1:服务器的ip和端口 // arg2:客户端与服务器之间的会话超时时间 以毫秒为单位的 // arg3:监视器对象 ZooKeeper zooKeeper = new ZooKeeper("127.0.0.1:2181", 5000, new Watcher() { @Override public void process(WatchedEvent event) { if (event.getState() == Event.KeeperState.SyncConnected) { System.out.println("连接创建成功!"); countDownLatch.countDown(); } } }); // 主线程阻塞等待连接对象的创建成功 countDownLatch.await(); // 会话编号 System.out.println(zooKeeper.getSessionId()); //判断节点是否存在 arg1:节点的路径 Stat stat=zooKeeper.exists("/wfj/node3",false); // 返回null,说明节点不存在 System.out.println("输出为null,证明节点不存在" + stat); // 创建节点 arg1:节点的路径 arg2:节点的数据 arg3:权限列表 world:anyone:cdrwa arg4:节点类型 持久化节点 zooKeeper.create("/wfj/node3","node3".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); // 获取节点的值 arg1:节点的路 arg3:读取节点属性的对象 Stat stat_get=new Stat(); byte [] bys=zooKeeper.getData("/wfj/node3",false,stat_get); // 打印数据和版本信息 System.out.println(new String(bys)); System.out.println(stat_get.getVersion()); // 修改节点的值 arg1:节点的路径 arg2:修改的数据 arg3:数据版本号 -1代表版本号不参与更新 Stat stat_set = zooKeeper.setData("/wfj/node1", "node13".getBytes(), -1); System.out.println(stat_set.getVersion()); // 获取子节点 arg1:节点的路径 List<String> list = zooKeeper.getChildren("/wfj", false); for (String str : list) { System.out.println(str); } // 删除节点 arg1:删除节点的节点路径 arg2:数据版本信息 -1代表删除节点时不考虑版本信息 zooKeeper.delete("/wfj/node3",-1); zooKeeper.close(); } catch (Exception ex) { ex.printStackTrace(); } } }
原文:https://www.cnblogs.com/jkin/p/14791465.html