上篇文章:說說zookeeper【伍】_參數與指令
本文說說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的使用。