1. 程式人生 > >說說zookeeper【陸】_zkClient客戶端

說說zookeeper【陸】_zkClient客戶端

本文說說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的使用。