zookeeper Java api
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,maven依赖: 4.0.0 per.ym zk 0.0.1-SNAPSHOT org.apache.zookeeper zookeeper 3.4.
千家信息网最后更新 2026年10月31日zookeeper Java api
maven依赖:
4.0.0 per.ym zk 0.0.1-SNAPSHOT org.apache.zookeeper zookeeper 3.4.12 junit junit 4.12 test 测试类:
package per.ym.zookeeper;import java.io.IOException;import java.util.List;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.AsyncCallback.ChildrenCallback;import org.apache.zookeeper.AsyncCallback.DataCallback;import org.apache.zookeeper.AsyncCallback.StatCallback;import org.apache.zookeeper.AsyncCallback.StringCallback;import org.apache.zookeeper.AsyncCallback.VoidCallback;import org.apache.zookeeper.KeeperException.Code;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.KeeperException;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.Watcher.Event.EventType;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.data.Stat;import org.junit.After;import org.junit.Before;import org.junit.Test;public class ZkTest implements Watcher{ private ZooKeeper zk; private CountDownLatch cdl; private String path = "/test"; private String rootPath = "/"; private int sessionTimeOut = 15000; private byte[] data = "data".getBytes(); private byte[] newData = "newData".getBytes(); @Before public void connect() throws IOException { zk = new ZooKeeper("192.168.61.131:2184", sessionTimeOut, this); cdl = new CountDownLatch(1); } //同步调用 @Test public void testSync( ) throws Exception { //等待与zookeeper服务端连接完成 cdl.await(); //创建一个持久节点/test,并为其赋值为data zk.create("/test", data, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); //获取根节点下的子节点 List children = zk.getChildren("/", this); System.out.println("根节点下的子节点有: " + children); //查询节点/test保存的数据 Stat stat = new Stat(); byte[] tempData = zk.getData(path, this, stat); System.out.println("test节点数据为: " + new String(tempData)); //设置节点/test的数据为newData zk.setData(path, newData, -1); tempData = zk.getData(path, this, stat); System.out.println("test节点新数据为: " + new String(tempData)); //删除节点/test zk.delete(path, -1); //判断节点/test是否存在 stat = zk.exists(path, this); System.out.println(stat); } //创建节点后进行回调 private StringCallback cb = new StringCallback() { @Override public void proce***esult(int rc, String path, Object ctx, String name) { switch (Code.get(rc)) { case CONNECTIONLOSS: //如果失去连接,我们无法保证是在创建前还是创建后丢失的,因此重试 create(); break; case OK: System.out.println("节点/test创建成功"); break; case NODEEXISTS: System.out.println("节点/test已经存在"); break; default: System.out.println(KeeperException.create(Code.get(rc), path)); } } }; //获取子节点进行回调 private ChildrenCallback ccb = new ChildrenCallback() { @Override public void proce***esult(int rc, String path, Object ctx, List children) { switch (Code.get(rc)) { case CONNECTIONLOSS: getChildren(); break; case OK: System.out.println("根节点下的子节点有: " + children); break; default: System.out.println(KeeperException.create(Code.get(rc), path)); } } }; //获取数据进行回调 private DataCallback dcb = new DataCallback() { @Override public void proce***esult(int rc, String path, Object ctx, byte[] data, Stat stat) { switch (Code.get(rc)) { case CONNECTIONLOSS: getData(); break; case OK: System.out.println("test节点数据为: " + new String(data)); break; default: System.out.println(KeeperException.create(Code.get(rc), path)); } } }; //设置数据进行回调 private StatCallback scb = new StatCallback() { @Override public void proce***esult(int rc, String path, Object ctx, Stat stat) { switch (Code.get(rc)) { case CONNECTIONLOSS: setData(); break; case OK: //这个ctx就是我们调用zk.setData时传入的最后一个参数 System.out.println("test节点设置新数 " + new String((byte[])ctx) + "成功"); break; default: System.out.println(KeeperException.create(Code.get(rc), path)); } } }; //删除节点进行回调 private VoidCallback vcb = new VoidCallback() { @Override public void proce***esult(int rc, String path, Object ctx) { switch (Code.get(rc)) { case CONNECTIONLOSS: delete(); break; case OK: System.out.println("删除节点/test成功"); break; default: System.out.println(KeeperException.create(Code.get(rc), path)); } } }; //节点是否存在进行回调 private StatCallback scb2 = new StatCallback() { @Override public void proce***esult(int rc, String path, Object ctx, Stat stat) { switch (Code.get(rc)) { case CONNECTIONLOSS: exists(); break; case OK: System.out.println("节点/test存在"); break; case NONODE: System.out.println("节点/test不存在"); break; default: break; } } }; //异步调用 @Test public void testAsync() throws Exception { cdl.await(); create(); getChildren(); setData(); getData(); exists(); delete(); exists(); } private void create() { zk.create(path, data, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT, cb, data); } private void getChildren() { zk.getChildren(rootPath, this, ccb, null); } private void getData() { zk.getData(path, this, dcb, null); } private void setData() { zk.setData(path, newData, -1, scb, newData); } private void delete() { zk.delete(path, -1, vcb, null); } private void exists() { zk.exists(path, this, scb2, null); } @Override public void process(WatchedEvent event) { //如果连接成功,放行 if (event.getType().equals(EventType.None)) { cdl.countDown(); } System.out.println(event); } @After public void close() throws InterruptedException { //测试完成后关闭连接 zk.close(); }}
节点
数据
成功
测试
参数
就是
是在
还是
保证
同步
服务
查询
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
科技金融是不是互联网金融
科技与互联网
科技互联网公司装修
互联网巨头科技公司
互联网金融 金融科技
深圳互联网络科技有限公司
北京禾田雨橡互联网科技
融贸通互联网科技
佩信高科技互联网
恒生科技互联网指数分析
互联网和黑科技的看法
浙江互联网科技研学营
互联网科技商业
深圳市优智互联网科技有限公司
迪庆互联网科技招生
爱医互联网络科技
互联网科技手机排行榜
互联网领先科技活动
数字科技和互联网金融哪个好
优雇互联网科技有限公司
中智农互联网科技
西安纸贵互联网科技有限公司
新华互联网科技学院
易互联网科技有限公司
互联网金融科技创新
南京欣网互联网科技
哈尔滨屹滨互联网科技有限公司
深圳无忧互联网科技
美国互联网科技公司
国产互联网科技公司