常用接口列表
创建ZooKeeper Session
public ZooKeeper(String connectString,
int sessionTimeout,
Watcher watcher)
throws IOException
public ZooKeeper(String connectString,
int sessionTimeout,
Watcher watcher,
long sessionId,
byte[] sessionPasswd)
throws IOException
参数列表:
- connectString:ZK连接地址,包含端口
- sessionTimeout:ZooKeeper Session失效时间,单位为毫秒
- Watcher 是个接口,通过这个接口可以收到session建立或者断开的事件,同样地,也能监视ZK数据的变化。当连接成功后,会获得SyncConnected的通知,如果连接断开,则会收到DISCONNECT通知。
Create
public String create(String path,
byte[] data,
List<ACL> acl,
CreateMode createMode)
throws KeeperException,
InterruptedException
- 创建一个给定的目录节点 path, 并给它设置数据,CreateMode 标识有四种形式的目录节点,分别一下四点。
- PERSISTENT:持久化目录节点,这个目录节点存储的数据不会丢失;
- PERSISTENT_SEQUENTIAL:顺序自动编号的目录节点,这种目录节点会根据当前已近存在的节点数自动加 1,然后返回给客户端已经成功创建的目录节点名;
- EPHEMERAL:临时目录节点,一旦创建这个节点的客户端与服务器端口也就是 session 超时,这种节点会被自动删除;
- EPHEMERAL_SEQUENTIAL:临时自动编号节点
exists
public Stat exists(String path,
boolean watch)
throws KeeperException,
InterruptedException
- 判断某个 path 是否存在,并设置是否监控这个目录节点,这里的 watcher 是在创建 ZooKeeper 实例时指定的 watcher,exists方法还有一个重载方法,可以指定特定的 watcher.
public Stat exists(String path,
Watcher watcher)
throws KeeperException,
InterruptedException
- 重载方法,这里给某个目录节点设置特定的 watcher,Watcher 在 ZooKeeper 是一个核心功能,Watcher 可以监控目录节点的数据变化以及子目录的变化,一旦这些状态发生变化,服务器就会通知所有设置在这个目录节点上的 Watcher,从而每个客户端都很快知道它所关注的目录节点的状态发生变化,而做出相应的反应.
delete
public void delete(String path,
int version)
throws InterruptedException,
KeeperException
- 删除 path 对应的目录节点,version 为 -1 可以匹配任何版本,也就删除了这个目录节点所有数据.
getChildren
public List<String> getChildren(String path,
boolean watch)
throws KeeperException,
InterruptedException
- 获取指定 path 下的所有子目录节点,同样 getChildren方法也有一个重载方法可以设置特定的 watcher 监控子节点的状态
setData
public Stat setData(String path,
byte[] data,
int version)
throws KeeperException,
InterruptedException
- 给 path 设置数据,可以指定这个数据的版本号,如果 version 为 -1 怎可以匹配任何版本
getData
public byte[] getData(String path,
boolean watch,
Stat stat)
throws KeeperException,
InterruptedException
- 获取这个 path 对应的目录节点存储的数据,数据的版本等信息可以通过 stat 来指定,同时还可以设置是否监控这个目录节点数据的状态
addAuthInfo
public void addAuthInfo(String scheme,
byte[] auth)
- 客户端将自己的授权信息提交给服务器,服务器将根据这个授权信息验证客户端的访问权限。
setACL
public Stat setACL(String path,
List<ACL> acl,
int version)
throws KeeperException,
InterruptedException
- 给某个目录节点重新设置访问权限,需要注意的是 Zookeeper 中的目录节点权限不具有传递性,父目录节点的权限不能传递给子目录节点。
- 目录节点 ACL 由两部分组成:perms 和 id。Perms 有 ALL、READ、WRITE、CREATE、DELETE、ADMIN 几种权限,而 id 标识了访问目录节点的身份列表,默认情况下有以下两种:ANYONE_ID_UNSAFE = new Id(“world”, “anyone”) 和 AUTH_IDS = new Id(“auth”, “”) 分别表示任何人都可以访问和创建者拥有访问权限。
getACL
public List<ACL> getACL(String path,
Stat stat)
throws KeeperException,
InterruptedException
- 获取某个目录节点的访问权限列表
异步接口列表
ZK的操作都提供了异步操作版本,有了异步版本后,可以消除部分while循环了。比如create的异步操作:
void create(String path, byte[] data,
List<ACL> acl,
CreateMode createMode,
AsyncCallback.StringCallback cb,
Object ctx)
前四个参数和同步操作相同,多了个callback和用于上下文传递的ctx。其中Callback有多种类型,比如StringCallback和DataCallback。
StringCallback有个接口方法:
` public void processResult(int rc, String path, Object ctx, String name);`
rc为返回的状态码,通过状态码可以判断操作是否成功。ctx即用于传递的上下文对象。