Zookeeper入门——Zookeeper的Java客户端API(2)

基本所有的对于节点数据读写都有同步和异步两个版本的重载方法,而且都可以通过该方法向某个节点上注册一个监视器Watcher,异步版本仅仅是多了一个回调接口和传递一个上下文对象参数,这两个参数作用都是相同的。

1. 获取节点的子节点列表

 

1. 同步:和getData方法类似,第一个参数path表示目标节点路径,而第二个参数是Watcher或者boolean,当节点的子节点列表发生变化时,zk服务器会向我们推送类型为NodeChildrenChanged的事件。返回的List中包含了所有子节点的路径值

public List<String> getChildren(String path, Watcher watcher)
public List<String> getChildren(String path, boolean watch)

2. 异步:

public void getChildren(String path, Watcher watcher, ChildrenCallback cb, Object ctx)
public void getChildren(String path, boolean watch, ChildrenCallback cb, Object ctx)

2. 查询节点是否存在

1. 同步:返回的Stat对象会包含该节点的所有信息,如果该节点不存在则会返回null

public Stat exists(String path, Watcher watcher)
public Stat exists(String path, boolean watch)

2. 异步:

public void exists(String path, Watcher watcher, StatCallback cb, Object ctx)
public void exists(String path, boolean watch, StatCallback cb, Object ctx)

3. 事务操作

Zookeeper中的事务操作有三个相关方法:这三个方法都可以实现相同的效果

(1)public List<OpResult> multi(Iterable<Op> ops):同步执行

(2)public void multi(Iterable<Op> ops, MultiCallback cb, Object ctx):异步执行

(3)public Transaction transaction():同步执行

但实际上transaction()方法是对multi方法的封装,因为每次返回 this 可以串行操作,最后执行commit(),提交批量事务操作,并返回List<OpResult>结果。以串行操作,最后执行commit(),提交批量事务操作,并返回List<OpResult>结果。

对应multi方法的同步和异步两个重载版本,commit方法也有同步和异步两个方法重载版本。

使用multi方法进行事务操作比较麻烦,代码比较繁琐,所以基本都是采用transaction()方法来创建一个事务对象,开启事务操作。

基本操作就是:zk.transaction().create(...).setData(...)... .commit();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章