zookeeper javaAPI
Posted 面具下的戏命师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zookeeper javaAPI相关的知识,希望对你有一定的参考价值。
zookeeper javaAPI
znode是zooKeeper集合的核心组件,zookeeper API提供了一小组方法使用zookeeper集合来操纵znode的所有细节。
客户端应该遵循以步骤,与zookeeper服务器进行清晰和干净的交互。
- 连接到zookeeper服务器。zookeeper服务器为客户端分配会话ID。
- 定期向服务器发送心跳。否则,zookeeper服务器将过期会话ID,客户端需要重新连接。
- 只要会话ID处于活动状态,就可以获取/设置znode。
- 所有任务完成后,断开与zookeeper服务器的连接。如果客户端长时间不活动,则 zookeeper服务器将自动断开客户端。
ZooKeeper常用方法
1、连接到zookeeper
ZooKeeper(String connectionString, int sessionTimeout, Watcher watcher)
- connectionString - zookeeper主机
- sessionTimeout - 会话超时(以毫秒为单位)
- watcher - 实现“监视器”对象。zookeeper集合通过监视器对象返回连接状态。
2、新增节点
// 同步方式 create(String path, byte[] data, List<ACL> acl, CreateMode createMode) // 异步方式 create(String path, byte[] data, List<ACL> acl, CreateMode createMode, AsyncCallback.StringCallback callBack,Object ctx)
- path - znode路径。例如,/node1 /node1/node11
- data - 要存储在指定znode路径中的数据
- acl - 要创建的节点的访问控制列表。zookeeper API提供了一个静态接口 ZooDefs.Ids 来获取一些基本的acl列表。例如,ZooDefs.Ids.OPEN_ACL_UNSAFE 返回打开znode的acl列表。
- createMode - 节点的类型,这是一个枚举。
- callBack-异步回调接口
- ctx-传递上下文参数
3、更新节点
// 同步方式 setData(String path, byte[] data, int version) // 异步方式 setData(String path, byte[] data, int version,AsyncCallback.StatCallback callBack, Object ctx)
- path- znode路径
- data - 要存储在指定znode路径中的数据。
- version- znode的当前版本。每当数据更改时,ZooKeeper会更新znode的版本 号。
- callBack-异步回调接口
- ctx-传递上下文参数
4、删除节点
// 同步方式 delete(String path, int version) // 异步方式 delete(String path, int version, AsyncCallback.VoidCallback callBack, Object ctx)
- path - znode路径。
- version - znode的当前版本
- callBack-异步回调接口
- ctx-传递上下文参数
5、查看节点
// 同步方式 getData(String path, boolean b, Stat stat) // 异步方式 getData(String path, boolean b,AsyncCallback.DataCallback callBack, Object ctx)
- path - znode路径。
- b- 是否使用连接对象中注册的监视器。
- stat - 返回znode的元数据。
- callBack-异步回调接口 ctx-传递上下文参数
6、查看子节点
// 同步方式 getChildren(String path, boolean b) // 异步方式 getChildren(String path, boolean b,AsyncCallback.ChildrenCallback callBack,Object ctx)
- path - Znode路径。
- b- 是否使用连接对象中注册的监视器。
- callBack - 异步回调接口。
- ctx-传递上下文参数
7、检查节点是否存在
// 同步方法 exists(String path, boolean b) // 异步方法 exists(String path, boolean b,AsyncCallback.StatCallback callBack,Object ctx)
- path- znode路径。
- b- 是否使用连接对象中注册的监视器。
- callBack - 异步回调接口。
- ctx-传递上下文参数
综合案列
使用 zookeeper 原生 API,连接需要时间,用 countDownLatch 阻塞,等待连接成功,控制台输出连接状态!
package com.wfj.zookeeper; import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat; import java.util.List; import java.util.concurrent.CountDownLatch; public class ZookeeperAPI { public static void main(String[] args) { try { // 计数器对象 CountDownLatch countDownLatch = new CountDownLatch(1); // arg1:服务器的ip和端口 // arg2:客户端与服务器之间的会话超时时间 以毫秒为单位的 // arg3:监视器对象 ZooKeeper zooKeeper = new ZooKeeper("127.0.0.1:2181", 5000, new Watcher() { @Override public void process(WatchedEvent event) { if (event.getState() == Event.KeeperState.SyncConnected) { System.out.println("连接创建成功!"); countDownLatch.countDown(); } } }); // 主线程阻塞等待连接对象的创建成功 countDownLatch.await(); // 会话编号 System.out.println(zooKeeper.getSessionId()); //判断节点是否存在 arg1:节点的路径 Stat stat=zooKeeper.exists("/wfj/node3",false); // 返回null,说明节点不存在 System.out.println("输出为null,证明节点不存在" + stat); // 创建节点 arg1:节点的路径 arg2:节点的数据 arg3:权限列表 world:anyone:cdrwa arg4:节点类型 持久化节点 zooKeeper.create("/wfj/node3","node3".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); // 获取节点的值 arg1:节点的路 arg3:读取节点属性的对象 Stat stat_get=new Stat(); byte [] bys=zooKeeper.getData("/wfj/node3",false,stat_get); // 打印数据和版本信息 System.out.println(new String(bys)); System.out.println(stat_get.getVersion()); // 修改节点的值 arg1:节点的路径 arg2:修改的数据 arg3:数据版本号 -1代表版本号不参与更新 Stat stat_set = zooKeeper.setData("/wfj/node1", "node13".getBytes(), -1); System.out.println(stat_set.getVersion()); // 获取子节点 arg1:节点的路径 List<String> list = zooKeeper.getChildren("/wfj", false); for (String str : list) { System.out.println(str); } // 删除节点 arg1:删除节点的节点路径 arg2:数据版本信息 -1代表删除节点时不考虑版本信息 zooKeeper.delete("/wfj/node3",-1); zooKeeper.close(); } catch (Exception ex) { ex.printStackTrace(); } } }
以上是关于zookeeper javaAPI的主要内容,如果未能解决你的问题,请参考以下文章
Zookeeper -- Zookeeper JavaAPI相关操作(Curator介绍Curator API 常用操作(节点的CRUD,Watch事件监听)分布式锁模拟12306售票案例)
SpringCloud Alibaba系列一文全面解析Zookeeper安装常用命令JavaAPI操作Watch事件监听分布式锁集群搭建核心理论