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。

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

 

org.I0Itec.zkclient..IZkStateListener

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

 

org.I0Itec.zkclient.IZkDataListener

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

 

org.I0Itec.zkclient.IZkChildListener

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失效時能夠自動重新訂閱這些事件,而不需要開發者重新訂閱。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM