ZooKeeper的API操作
方法 | 作用 |
---|---|
create(path, data, flags) | 创建一个 znode, path 是其路径,data 是存储在该 ZNode 上的数据, flags常用的有: PERSISTEN, PERSISTENT_SEQUENTAIL, EPHEMERAL, EPHEMERAL_SEQUENTAIL |
delete(path, version) | 删除一个 ZNode,可以通过 version 删除指定的版本, 如果 version 是 -1 的话,表示删除所有的版本 |
exists(path, watch) | 判断指定 ZNode 是否存在,并设置是否 Watch 这个 ZNode。这里如果 要设置 Watcher 的话,Watcher是在创建 ZooKeeper 实例时 指定的,如 果要设置特定的 Watcher 的话,可以调用另一个重载版本的 exists(path, watcher)。以下几个带 watch 参数的 API 也都类似 |
getData(path, watch) | 读取指定 ZNode 上的数据,并设置是否 watch 这个 ZNode |
setData(path, watch) | 更新指定 ZNode 的数据,并设置是否 Watch 这个 ZNode |
getChildren(path, watch) | 获取指定 ZNode 的所有子 ZNode 的名字,并设置是否 Watch 这个 ZNode |
sync(path) | 把所有在 sync 之前的更新操作都进行同步,达到每个请求都在半数以上 的 ZooKeeper Server上生效。path参数目前没有用 |
setAcl(path, acl) | 设置指定 ZNode 的 Acl 信息 |
getAcl(path) | 获取指定 ZNode 的 Acl 信息 |
导入Maven依赖
<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
</dependency>
</dependencies>
基础信息设置
// 客户端去请求链接的时候的服务器链接地址信息
private static String connectString = "bigdata02:2181,bigdata03:2181,bigdata04:2181";
// 客户端去请求链接的超时时长
private static int sessionTimeout = 4000;
// 节点名称,统一命名
private static String znode = "/zkTEST";
创建节点
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
// 建立 ZooKeeper 链接
ZooKeeper zk = new ZooKeeper(connectString,sessionTimeout,null);
System.out.println("==== " + zk + "====");
// 创建 znode ,创建的时候,这个节点不能存在,存在会报错。
String createdNode = zk.create(znode, "hello".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println(createdNode+"节点创建成功");
zk.close();
}
![](https://img.haomeiwen.com/i14270006/792f4bae62afd9ae.png)
查看节点
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
// 建立 ZooKeeper 链接
ZooKeeper zk = new ZooKeeper(connectString,sessionTimeout,null);
System.out.println("==== " + zk + "====");
// 查看节点
byte[] data = zk.getData(znode, null, null);
//打印出来了hello节点了。
System.out.println(new String(data));
zk.close();
}
![](https://img.haomeiwen.com/i14270006/bf78283a77025c21.png)
修改节点数据
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
// 建立 ZooKeeper 链接
ZooKeeper zk = new ZooKeeper(connectString,sessionTimeout,null);
System.out.println("==== " + zk + "====");
// 修改节点数据 为hello2
Stat setData = zk.setData(znode, "hello2".getBytes(), -1);
System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(setData.getMtime())));
byte[] data1 = zk.getData(znode, null, null);
System.out.println(new String(data1));
zk.close();
}
![](https://img.haomeiwen.com/i14270006/e891cd4f6c0f17e5.png)
判断节点是否存在
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
// 建立 ZooKeeper 链接
ZooKeeper zk = new ZooKeeper(connectString,sessionTimeout,null);
System.out.println("==== " + zk + "====");
// 判断节点是否存在
Stat exists = zk.exists(znode, null);
System.out.println(null != exists?true:false);
zk.close();
}
![](https://img.haomeiwen.com/i14270006/ff06e6b06fe3423f.png)
获取子节点
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
// 建立 ZooKeeper 链接
ZooKeeper zk = new ZooKeeper(connectString,sessionTimeout,null);
System.out.println("==== " + zk + "====");
// 获取子节点
List<String> children = zk.getChildren("/", null);
for(String child: children){
System.out.println(child);
}
zk.close();
}
![](https://img.haomeiwen.com/i14270006/8c1460476831aadf.png)
删除节点
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
// 建立 ZooKeeper 链接
ZooKeeper zk = new ZooKeeper(connectString,sessionTimeout,null);
System.out.println("==== " + zk + "====");
// 删除节点
zk.delete(znode, -1);
Stat exists1 = zk.exists(znode, null);
System.out.println(null == exists1?"删除成功":"删除失败");
zk.close();
}
![](https://img.haomeiwen.com/i14270006/9dce47224f678838.png)
网友评论