zookeeper Java api
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,maven依赖: 4.0.0 per.ym zk 0.0.1-SNAPSHOT org.apache.zookeeper zookeeper 3.4.
千家信息网最后更新 2025年12月01日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安全错误
数据库的锁怎样保障安全
数据库undo list
Ebsco数据库检索实训心得
西安软件开发培训有哪些学校
莱瑞科技软件开发价格
西安符号网络技术有限公司
北京冬奥会数据库
创业板科技互联网公司
如何保障数据库安全
中移物联智慧网络技术中心
昆山软件开发培训班
金华固态硬盘服务器
龙岗网络安全服务怎么样
博瑞思创互联网科技有限公司
广州软件开发地点
深圳手机云控软件开发商
网络安全十三不准指什么
ssh保存数据库变问好号
蚂蚁科技互联网巨头
Java软件开发工程师发展前景
棋牌游戏软件开发哪家好
济南浪潮集团软件开发员工名单
网络技术盈利模式
个例报告以数据库的形式管理
发展快的软件开发公司
热血航线服务器不见了
方舟炫彩龙怎么在服务器里打开
网络安全感悟作文400字
中测信安网络安全技术
文明重启什么服务器是核心
久其报表如何做好数据库维护