博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zookeeper API
阅读量:3559 次
发布时间:2019-05-20

本文共 4703 字,大约阅读时间需要 15 分钟。

String (String path, byte[] data, List<ACL> acl,CreateMode createMode) 创建一个给定的目录节点 path, 并给它设置数据, 标识有四种形式的目录节点,分别是 PERSISTENT:持久化目录节点,这个目录节点存储的数据不会丢失;PERSISTENT_SEQUENTIAL:顺序自动编号的目录节点,这种目录节点会根据当前已近存在的节点数自动加 1,然后返回给客户端已经成功创建的目录节点名;EPHEMERAL:临时目录节点,一旦创建这个节点的客户端与服务器端口也就是 session 超时,这种节点会被自动删除;EPHEMERAL_SEQUENTIAL:临时自动编号节点
Stat (String path, boolean watch) 判断某个 path 是否存在,并设置是否监控这个目录节点,这里的 watcher 是在创建 ZooKeeper 实例时指定的 watcher,方法还有一个重载方法,可以指定特定的watcher
Stat (String path,Watcher watcher) 重载方法,这里给某个目录节点设置特定的 watcher,Watcher 在 ZooKeeper 是一个核心功能,Watcher 可以监控目录节点的数据变化以及子目录的变化,一旦这些状态发生变化,服务器就会通知所有设置在这个目录节点上的 Watcher,从而每个客户端都很快知道它所关注的目录节点的状态发生变化,而做出相应的反应
void ( path, int version) 删除 path 对应的目录节点,version 为 -1 可以匹配任何版本,也就删除了这个目录节点所有数据
List<String>(String path, boolean watch) 获取指定 path 下的所有子目录节点,同样 方法也有一个重载方法可以设置特定的 watcher 监控子节点的状态
Stat (String path, byte[] data, int version) 给 path 设置数据,可以指定这个数据的版本号,如果 version 为 -1 怎可以匹配任何版本
byte[] (String path, boolean watch, Stat stat) 获取这个 path 对应的目录节点存储的数据,数据的版本等信息可以通过 stat 来指定,同时还可以设置是否监控这个目录节点数据的状态
void(String scheme, byte[] auth) 客户端将自己的授权信息提交给服务器,服务器将根据这个授权信息验证客户端的访问权限。
Stat (String path,List<ACL> acl, int version) 给某个目录节点重新设置访问权限,需要注意的是 Zookeeper 中的目录节点权限不具有传递性,父目录节点的权限不能传递给子目录节点。目录节点 ACL 由两部分组成:perms 和 id。
Perms 有 ALL、READ、WRITE、CREATE、DELETE、ADMIN 几种 
而 id 标识了访问目录节点的身份列表,默认情况下有以下两种:
ANYONE_ID_UNSAFE = new Id("world", "anyone") 和 AUTH_IDS = new Id("auth", "") 分别表示任何人都可以访问和创建者拥有访问权限。
List<ACL>(String path,Stat stat)

获取某个目录节点的访问权限列表

导入ZooKeeper相关的jar包,在zookeeper减压后的目录下

jline-0.9.94.jar

log4j-1.2.15.jar
zookeeper-3.3.6.jar

1、创建连接

public ZooKeeper zk;	@Before	public void before() throws IOException{		//zookeeper地址和在zoo.cfg中配置的客户端端口		zk = new ZooKeeper("192.168.1.106:2181", 10000, new Watcher() {             // 监控所有被触发的事件            public void process(WatchedEvent event) {                 System.out.println("已经触发了" + event.getType() + "事件!");             }         });	}
2、关闭连接

@After	public void after() throws InterruptedException{		zk.close();	}
3、创建目录
@Test	public void create() throws IOException, KeeperException, InterruptedException{		/**		 * String create(String path, byte[] data, List
acl, CreateMode createMode) throws KeeperException, InterruptedException * 参数: * 1、path:路径 * 2、data:值 * 3、acl:权限,一般是这个 * 4、createMode:文件类型 * PERSISTENT:创建后只要不删就永久存在 EPHEMERAL:会话结束年结点自动被删除,EPHEMERAL结点不允许有子节点 SEQUENTIAL:节点名末尾会自动追加一个10位数的单调递增的序号,同一个节点的所有子节点序号是单调递增的 PERSISTENT_SEQUENTIAL:结合PERSISTENT和SEQUENTIAL EPHEMERAL_SEQUENTIAL:结合EPHEMERAL和SEQUENTIAL */ zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); }
4、get方法

@Test	public void getData() throws KeeperException, InterruptedException{		/**		 * byte[] getData(String path, boolean watch, Stat stat) throws KeeperException, InterruptedException		 * 参数:		 * 	path:路径		 */		System.out.println(new String(zk.getData("/testRootPath", false, null)));	}
5、set方法

@Test	public void setData() throws KeeperException, InterruptedException{		/**		 * 	Stat setData(String path, byte[] data, int version) throws KeeperException, InterruptedException		 * 	path:路径		 *	data:新值		 *	version:可以匹配版本号,-1则表示可以匹配任何版本		 */		zk.setData("/testRootPath", "newData".getBytes(), -1);		System.out.println("修改后的值:"+new String(zk.getData("/testRootPath", false, null)));	}
6、删除

@Test	public void delete() throws InterruptedException, KeeperException{		/**		 * void delete(String path, int version);		 * path:路径		 * version:匹配版本号,-1表示可以匹配任何版本		 */		zk.delete("/testRootPath", -1);	}

7、判断文件是否存在

@Test	public void exists() throws KeeperException, InterruptedException{		Stat stat = zk.exists("/testRootPath", false);		if(stat == null){			System.out.println("不存在");		}else{			System.out.println("存在");			//状态中封装文件的信息			System.out.println(stat.getAversion());			System.out.println(stat.getCtime());			System.out.println(stat.getCversion());			System.out.println(stat.getDataLength());			System.out.println(stat.getMtime());			System.out.println(stat.getMzxid());			System.out.println(stat.getVersion());			System.out.println(stat.getPzxid());		}	}
8、遍历目录

@Test	public void getChild() throws KeeperException, InterruptedException{		//创建一级目录,二级目录,三级目录		zk.create("/d", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); 		zk.create("/d/d1", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); 		zk.create("/d/d2", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); 		zk.create("/d/d1/d01", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); 		List
child = zk.getChildren("/d", false); for(String c:child){ System.out.println(c); //输出d1 d2 } }

转载地址:http://rjcrj.baihongyu.com/

你可能感兴趣的文章
【笔记】springboot+spring security登录流程实现
查看>>
【练习】2021下半年数据结构刷题笔记和总结 (一)(图和动态规划)
查看>>
【项目实战】vue+springboot项目使用富文本编辑器实现长文章发表和展示
查看>>
【项目】uniapp前端接收后端springboot数据并渲染到界面+使用swiper和uView
查看>>
【学习笔记】比较分别用prim和kruskal实现最小生成树和算法优化方案
查看>>
【记录】python多线程的使用 线程同步(LOCK和RLOCK) python与mysql数据库交互实现增加和查找 python的格式化输出
查看>>
【算法学习】动态规划之输出两个字符串最长公共子序列c++版
查看>>
【学习笔记】redis命令和使用(一)与key有关的命令
查看>>
【算法】深度优先搜索遍历的应用 设计算法以求解无向图G的连通分量的个数和无向图G的边数
查看>>
【算法】广度遍历算法的应用 求出距离顶点v0的最短路径长度为最长的一个顶点,图结构的bfs生成树及其双亲表示形式
查看>>
【项目】springboot中使用kaptcha生成验证码,登录时密码加盐处理
查看>>
【JAVA多线程学习笔记】(1)实现线程的方式 线程生命周期 操作线程的方法
查看>>
【java学习笔记-io流 文件读写和键盘读写】带缓存的输入/输出流和数据输入/输出流
查看>>
【Java作业】实验二 货物进销管理系统(运行成功完整代码
查看>>
【学习笔记】mongoDB初步(一)MongoDB的安装和增删改查基本语法,使用和命令
查看>>
【学习笔记】在windows下进行基于TCP的本地客户端和服务端socket通信
查看>>
【学习笔记】mongodb的使用(二)flask项目使用mongodb实现人员管理系统
查看>>
【前端笔记】直接用路由渲染面包屑导航信息和菜单伸缩
查看>>
【练习】2021下半年数据结构刷题笔记和总结 (二) 树、查找-- 不同的排序算法、二叉排序树 平衡二叉树、哈希表查找、线索二叉树、
查看>>
【flask学习笔记】flask与HTTP,flask与mongodb交互,用手机输入局域网ip访问flask界面
查看>>