基本所有的對於節點數據讀寫都有同步和異步兩個版本的重載方法,而且都可以通過該方法向某個節點上註冊一個監視器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();