ZkClient

 

ZkClient

 


建立一個ZkClient實例

ZkClient zkClient = new ZkClient("127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002");

 


讀取數據

byte[] readData(String path);
byte[] readData(String path, boolean returnNullIfPathNotExists);
byte[] readData(String path, Stat stat);

 

寫入數據

Stat writeData(String path, byte[] data);
Stat writeData(String path, byte[] data, int expectedVersion);

 


建立節點

void createPersistent(String path);
void createPersistent(String path, boolean createParents);
void createPersistent(String path, byte[] data);
String createPersistentSequential(String path, byte[] data);
void createEphemeral(final String path);
void createEphemeral(final String path, final byte[] data);
String createEphemeralSequential(final String path, final byte[] data);
String create(final String path, byte[] data, final CreateMode mode);

 


刪除節點

boolean delete(final String path);
boolean deleteRecursive(String path);

 


查詢節點

boolean exists(final String path);
List<String> getChildren(String path);
long getCreationTime(String path);
int countChildren(String path);

 


訂閱事件

zkclient的強大之處不在於基本zookeeper api操做,而在於事件監聽機制,也就是zookeeper的watches。api

Zookeeper的watcher在使用上存在一次性、session過時等難點,所以zkclient對這些問題進行了封裝和屏蔽。 zkclient一共定義了三種事件:session

 

org.I0Itec.zkclient..IZkStateListenerspa

public void handleStateChanged(KeeperState state) throws Exception;
public void handleNewSession() throws Exception;

 

org.I0Itec.zkclient.IZkDataListenercode

public void handleDataChange(String dataPath, byte[] data) throws Exception;
public void handleDataDeleted(String dataPath) throws Exception;

 

org.I0Itec.zkclient.IZkChildListenerblog

public void handleChildChange(String parentPath, List currentChildren) throws Exception;

 

 

  • IZkStateListener 定義了兩種事件,一種是鏈接狀態的改變,例如由未鏈接改變成鏈接上,鏈接上改成過時等;另外一種建立一個新的session(鏈接), 一般是因爲session失效而後新的session被創建時觸發。通常此時須要開發者從新建立臨時節點(Ephemeral Nodes)。
  • IZkDataListener 也定義了兩種事件,一種是節點數據的變化,另外一種是節點被刪除。
  • IZkChildListener 定義了一種事件,描述子節點變化了,這時候獲取到的是新的子節點列表。若是此節點被刪除,那麼子節點列表是null(非空列表)。

 

 

IZkClient可以很是方便的訂閱這三種事件:事件

void subscribeStateChanges(IZkStateListener listener);
void subscribeDataChanges(String path, IZkDataListener listener);
List subscribeChildChanges(String path, IZkChildListener listener);

 

而zkclient最強大之處在於,當發送session失效時可以自動從新訂閱這些事件,而不須要開發者從新訂閱。開發

相關文章
相關標籤/搜索