天天看點

說說zookeeper【陸】_zkClient用戶端

上篇文章:說說zookeeper【伍】_參數與指令

本文說說zookeeper最常用的兩個用戶端:zkClient和Curator。

zkClient

zkClient是github上一個開源的zookeeper用戶端,在zookeeper原生接口上進行了包裝,更加易用,内部實作了如Session逾時重連、watcher反複注冊等功能。

zkClient的構造參數:

說說zookeeper【陸】_zkClient用戶端

建立節點create接口API:

說說zookeeper【陸】_zkClient用戶端

删除節點delete接口API

說說zookeeper【陸】_zkClient用戶端

擷取子節點清單

public List<String> getChildren(String path)
           

監聽子節點清單

public List<String> subscribeChildChanges(String path, IZkChildListener listener)
           
其中,IZkChildListener是一個監聽器接口,其定義如下:
public abstract interface IZkChildListener{
            
public abstract void handleChildChange(String parentPath, List<String> currentChilds)
    throws Exception;
}
           
其中handleChildChange用來處理服務端發送過來的事件通知,API如下:
說說zookeeper【陸】_zkClient用戶端
如果用戶端對nodeA節點注冊的IZkChildListener監聽,那麼将會收到事件通知類型如下:
說說zookeeper【陸】_zkClient用戶端
三點說明: 1.用戶端可以對一個不存在的節點進行子節點監聽; 2.當子節點清單發生變化時,伺服器會通知用戶端,并将最新的子節點清單發送給用戶端; 3.該幾點本身的建立和删除也會通知用戶端; 擷取節點内容readDate接口API
public <T> T readData(String path, boolean returnNullIfPathNotExists)
           
該接口的傳回值已經被反序列化為指定對象。
說說zookeeper【陸】_zkClient用戶端
該接口對服務端事件監聽采用如下Listener實作:
public abstract interface IZkDataListener
{
  public abstract void handleDataChange(String paramString, Object paramObject)
    throws Exception;

  public abstract void handleDataDeleted(String paramString)
    throws Exception;
}
           
IZkDataListener API參數
說說zookeeper【陸】_zkClient用戶端
IZkDataListener事件說明
說說zookeeper【陸】_zkClient用戶端
更新資料writeData接口API
public Stat writeDataReturnStat(String path, Object datat, int expectedVersion)
           
說說zookeeper【陸】_zkClient用戶端
檢查節點是否存在exists接口
public boolean exists(String path)
           
ZkClient和zookeeper原生API的差別 1.節點名稱不用序列化; 2.可遞歸建立節點; 3.使用監聽器實作watcher,listener不是一次性的,注冊一次一直生效; 4.可逐層周遊删除非葉子節點; 5.可對不存在的節點進行子節點監聽; 6.原生API的watcher隻是一個監聽,由服務端通知用戶端,但是不會告知變化情況 下篇文章我們說說zookeeper另外一個用戶端Curator的使用。

繼續閱讀