說說zookeeper【陸】_zkClient客戶端
阿新 • • 發佈:2018-12-25
本文說說zookeeper最常用的兩個客戶端:zkClient和Curator。
zkClient
zkClient是github上一個開源的zookeeper客戶端,在zookeeper原生介面上進行了包裝,更加易用,內部實現瞭如Session超時重連、watcher反覆註冊等功能。
zkClient的構造引數:
建立節點create介面API:
刪除節點delete介面API
獲取子節點列表
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如下:
如果客戶端對nodeA節點註冊的IZkChildListener監聽,那麼將會收到事件通知型別如下:
三點說明:
1.客戶端可以對一個不存在的節點進行子節點監聽;
2.當子節點列表發生變化時,伺服器會通知客戶端,並將最新的子節點列表傳送給客戶端;
3.該幾點本身的建立和刪除也會通知客戶端;
獲取節點內容readDate介面API
public <T> T readData(String path, boolean returnNullIfPathNotExists)
該介面的返回值已經被反序列化為指定物件。
該介面對服務端事件監聽採用如下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引數
IZkDataListener事件說明
更新資料writeData介面API
public Stat writeDataReturnStat(String path, Object datat, int expectedVersion)
檢查節點是否存在exists介面
public boolean exists(String path)
ZkClient和zookeeper原生API的區別
1.節點名稱不用序列化;
2.可遞迴建立節點;
3.使用監聽器實現watcher,listener不是一次性的,註冊一次一直生效;
4.可逐層遍歷刪除非葉子節點;
5.可對不存在的節點進行子節點監聽;
6.原生API的watcher只是一個監聽,由服務端通知客戶端,但是不會告知變化情況
下篇文章我們說說zookeeper另外一個客戶端Curator的使用。