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();

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