一、依赖

<dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.9</version><type>pom</type>
</dependency>

二、API介绍

1.创建会话

1) ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)
2) ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, boolean canBeReadOnly)
3) ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd)
4) ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd, boolean canBeReadOnly)客户端与服务端回话的创建是一个异步的过程:
1) 完成客户端的初始化就返回,此时连接并没有真正的建立起来。
2) 当连接真正建立后,客户端会收到一个时间通知。
ZK构造方法参数说明
connectString:指zk的服务器列表,以英文输入法下逗号分割的host:port,比如192.168.2.14:2181,192.168.1.15:2181
sessionTimeout:会话超时时间,单位是毫秒ͺ当在这个时间内没有收到心跳检测,会话就会失效
watcher:注册的watcher,null表示不设置
canBeReadOnly:用于标识当前会话是否支持"read-only"模式
sessionId:会话ID
sessionPasswd:会话密钥

2.创建节点

#同步创建节点
1) String create(String path, byte[] data, List<ACL> acl, CreateMode createMode)
#异步创建节点
2) void create(String path, byte[] data,List<ACL> acl, CreateMode createMode, AsyncCallback.StringCallback cb, Object ctx); 以上创建方法都不支持递归创建节点,当节点存在时抛出异常NodeExistsException
ZK create api参数说明
path:被创建的节点路,比如:/zoo/tiger
data[]:节点数据
acl:Acl策略
createMode:节点类型,枚举类型,有四种选择持久 PERSISTEN持久顺序 PERSISTENT_SEQUENTIAL临时 EPHEMERAL临时顺序 EPHEMERAL_SEQUENTIAL
cb:异步回调函数,需要实现StringCallback接口,当服务端创建完成后,客户端会自动调用这个对象的processResult方法
ctx:用于传递一个对象,可以在回调方法执行的时候用,通常用于传递业务的上下文信息

3.删除节点

 #同步删除节点
1) void delete(String path, int version);
#异步删除节点
2) void delete(String path, int version, AsyncCallback.VoidCallback cb, Object ctx); 
ZK delete api参数说明
path:被删除的节点路径
version:知道节点的数据版本,如果指定的版本不是最新版本,将会报错,它的作用类似于hibernate中的乐观锁
cb:异步回调函数
ctx:上下文信息

4.获取子节点

#返回子节点
1) List<String> getChildren(String path, boolean watch)
#返回子节点和stat
2) List<String> getChildren(String path, boolean watch, Stat stat)
#异步方式返回子节点,返回path指定节点的状态信息(stat)
3) void getChildren(String path, boolean watch, AsyncCallback.Children2Callback cb, Object ctx)
#异步方式返回子节点,不返回path指定节点的状态信息(stat)
4) void getChildren(String path, boolean watch, AsyncCallback.ChildrenCallback cb, Object ctx)
5) List<String> getChildren(String path, Watcher watcher)
6) List<String> getChildren(String path, Watcher watcher, Stat stat)
7) void getChildren(String path, Watcher watcher, AsyncCallback.Children2Callback cb, Object ctx)
8) void getChildren(String path, Watcher watcher, AsyncCallback.ChildrenCallback cb, Object ctx)
ZK geChildren API参数说明
path:数据节点路径
watcher:设置watcher后,如果path对应节点的数据发生变化,将会得到通知,允许为null
watch:是否使用默认的watcher
stat:指定数据节点的状态信息
cb:异步回调函数
ctx:上下文信息

5.获取节点数据

1) void getData(String path, boolean watch, AsyncCallback.DataCallback cb, Object ctx)
2) byte[] getData(String path, boolean watch, Stat stat)
3) void getData(String path, Watcher watcher, AsyncCallback.DataCallback cb, Object ctx)
4) byte[] getData(String path, Watcher watcher, Stat stat)
ZK getData API参数说明
path:数据节点路径
watcher:设置watcher后,如果path对应节点的数据发生变化,将会得到通知,允许为null
watch:是否使用默认的watcher
stat:指定数据节点的状态信息
cb:异步回调函数
ctx:上下文信息

6.修改节点数据

1) Stat setData(String path, byte[] data, int version)
2) void setData(String path, byte[] data, int version, AsyncCallback.StatCallback cb, Object ctx)
ZK setData API参数说明
path:被修改的节点路径
data:新的数据
version:版本,与上述功能一样
cb:异步回调函数
ctx:上下文信息

7.检测节点是否存在

1) Stat exists(String path, boolean watch)
2) void exists(String path, boolean watch, AsyncCallback.StatCallback cb, Object ctx)
3) Stat exists(String path, Watcher watcher)
4) void exists(String path, Watcher watcher, AsyncCallback.StatCallback cb, Object ctx)
ZK exists API参数说明
path:数据节点路径
watcher:注册的watcher,用于监听三个事件节点被创建节点被删除节点被更新
watch:是否使用默认watcher
cb:异步回调函数
ctx:上下文信息

三、编码

public class ZookeeperTest {private static final String URL = "192.168.2.14:2181";private ZooKeeper zk;@Beforepublic void setUp() throws Exception {zk = new ZooKeeper(URL, 20000, new Watcher() {// 监控所有被触发的事件@Overridepublic void process(WatchedEvent event) {System.out.println("已经触发了" + event.getType() + "事件!");}});}// 创建目录节点@Testpublic void createNode() throws Exception {zk.create("/zkRoot", "10086".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}// 创建子节点@Testpublic void createChildNode() {try {zk.create("/zkRoot/zkChild", "1008611".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);} catch (KeeperException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}// 显示节点列表@Testpublic void listNodes() throws Exception {List<String> children = zk.getChildren("/", true);System.out.println(children);}// 获取节点@Testpublic void getNode() throws Exception {System.out.println(new String(zk.getData("/zkRoot/zkChild", true, null)));}// 修改节点信息@Testpublic void updateNode() throws Exception {// version为-1则忽略版本检查zk.setData("/zkRoot/zkChild", "1008612".getBytes(), -1);}// 删除节点@Testpublic void deleteNode() {// version为-1则忽略版本检查try {zk.delete("/zkRoot/zkChild", -1);} catch (InterruptedException e) {e.printStackTrace();} catch (KeeperException e) {e.printStackTrace();}}// 查看节点状态@Testpublic void showStatus() throws Exception {Stat rt = zk.exists("/zkRoot/zkChild", true);if (rt != null) {System.out.println(rt);} else {System.out.println("节点不存在");}}@Afterpublic void tearDown() throws Exception {zk.close();}}

四、Watch机制

1) 客户端向zk服务器注册watcher的同时,会将watcher对象存储在客户端的watchManger中。
2) zk服务器触发watcher事件后,会向客户端发送通知,客户端线程从watchManger中调用watcher执行。

 重要说明:watch设置后,一旦触发一次立即会失效,如果需要一直监听,需要再次注册!!!

转载于:https://www.cnblogs.com/moonlightL/p/7404648.html

Java API 操作Zookeeper相关推荐

  1. 2021年大数据ZooKeeper(五):ZooKeeper Java API操作

    目录 ZooKeeper Java API操作 引入maven坐标 节点的操作 ZooKeeper Java API操作 这里操作Zookeeper的JavaAPI使用的是一套zookeeper客户端 ...

  2. 使用 Java API 操作 HBase

    使用 Java API 操作 HBase 数据库,就类似HBase Shell,本质上一个是Java 代码,一个是Shell 命令.(hadoop 的文件系统莫不如此,可用Java API 的方式操作 ...

  3. Hbase java API操作(模板代码)

    Hbase java API操作 1 创建maven工程 导入jar包 <repositories><repository><id>cloudera</id& ...

  4. kafka详解(JAVA API操作kafka、kafka原理、kafka监控)-step2

    1.JAVA API操作kafka  修改Windows的Host文件: 目录:C:\Windows\System32\drivers\etc (win10) 内容: 192.168.40.150 k ...

  5. Hbase 完全分布式模式的搭建、命令行操作、Java API操作

    追风赶月莫停留,平芜尽处是春山. 文章目录 追风赶月莫停留,平芜尽处是春山. 环境 Hbase 完全分布式模式的搭建 一.下载安装包,解压到合适位置: 二.配置相关的文件: 三.将Hbase复制到其他 ...

  6. Kafka系列三 java API操作

    使用java API操作kafka 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

  7. Hadoop详解(四):HDFS shell操作和Java API操作

    1. HDFS环境准备 1.1 HDFS的格式化与启动 HDFS配置完之后就可以对其进行格式化操作.在NameNode所在机器上执行如下命令进行HDFS的格式化操作: hadoop namenode ...

  8. Windows下使用Java API操作HDFS的常用方法

    场景 Windows下配置Hadoop的Java开发环境以及用Java API操作HDFS: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...

  9. Windows下配置Hadoop的Java开发环境以及用Java API操作HDFS

    场景 HDFS的访问方式之HDFS shell的常用命令: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119351218 在上 ...

最新文章

  1. 图解VC++工具栏和状态栏编程实例
  2. 正则表达式校验例子[原创]
  3. NeurIPS 2021 | 通过寻找平坦最小值,克服小样本增量学习中的灾难性遗忘
  4. 【数据结构与算法】之判断是否互为字符重排
  5. 新建和发布Windows服务的几个常见问题
  6. SpringSecurity案例之认证服务security配置
  7. server sql 众数_sql 语句系列(众数中位数与百分比)[八百章之第十五章]
  8. 2017.9.24 虔诚的墓主人 思考记录
  9. linux thread 状态检查,Linux下查看进程的线程 - pstree
  10. 4059. 统计某指定字符出现个数
  11. Daily Scrum10 11.14
  12. 后危机时代,DCS的新征程
  13. 黑苹果安装记录(史上最简单的安装教程——小白福利)
  14. 群晖NAS设备MIB手册
  15. 小程序https本地服务器,微信小程序搭建自己的Https服务器
  16. 解决SQL server中提示对象名无效
  17. SharePoint 2016 Search 定制开发简介系列七-Search Database with Security Trimming
  18. cmd批量修改文件名 增加文字_cmd命令批量修改文件名或后缀名
  19. 脑卒中后认知障碍的现代康复治疗进展
  20. NVDIMM在闪存存储中的应用探讨

热门文章

  1. 虚拟机在Hyper-V和Citrix Xenserver上的区别
  2. linux下软件的基本安装和卸载 法一
  3. pom添加依赖后不报错但是代码依然缺少依赖
  4. Flink数据清洗(Kafka事实表+Redis维度表)
  5. Bad level value for property: .level
  6. cannot resolve symbol ‘log‘问题解决
  7. Intellij idea导入项目时没有目录结构
  8. NIFI的ERROR报错信息如何清空
  9. mysql的事务操作
  10. Saleor ran into an unexpected problem