前面簡單研究了curator的使用,下面簡單研究zkclient的使用。
1.創建連接
private static final String CONNECT_ADDR = "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"; private static ZkClient geneClient() { return new ZkClient(new ZkConnection(CONNECT_ADDR), 10000); }
創建客戶端的方法: ZKClient(Arguments)
參數1:zkServer zookeeper服務器的地址,用","分割
參數2:sessionTimeout超時回話,為毫秒,默認是30000ms
參數3:connectionTimeOut 連接超時會話
參數4:IZKConnection接口的實現類
參數5:zkSerializer 茲定於序列化實現
2.簡單操作
1.創建節點
可以遞歸創建節點,只不過遞歸創建的節點值為空。
// 創建節點 geneClient.create("/test1", "sssss", CreateMode.PERSISTENT); // 遞歸創建節點,只是節點的值為空 geneClient.createPersistent("/test2/t22", true);
結果

創建方法如下:

2.刪除節點
可以遞歸刪除節點。
boolean delete = geneClient.delete("/test1"); // 遞歸刪除 boolean deleteRecursive = geneClient.deleteRecursive("/test2");
3.獲取節點內容和遍歷子節點
Object readData = geneClient.readData("/test1");
System.out.println(readData);
List<String> list = geneClient.getChildren("/test2");
for (String p : list) {
System.out.println(p);
String rp = "/test2/" + p;
String data = geneClient.readData(rp);
System.out.println("節點為:" + rp + ",內容為: " + data);
}
4.判斷節點是否存在
boolean exists = geneClient.exists("/test1"); System.out.println(exists);
5.修改節點
Stat writeData = geneClient.writeData("/test1", "cccc");
System.out.println(writeData);
System.out.println(geneClient.readData("/test1"));
3.監聽節點
1.監聽節點變化
geneClient.subscribeDataChanges("/test1", new IZkDataListener() {
@Override
public void handleDataDeleted(String dataPath) throws Exception {
System.out.println("節點被刪除");
}
@Override
public void handleDataChange(String dataPath, Object data) throws Exception {
System.out.println(dataPath + "\t" + data);
}
});
2.監聽子節點變化(只能監聽字節點,子孫節點無效)
geneClient.subscribeChildChanges("/test1", new IZkChildListener() {
@Override
public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
System.out.println(parentPath+"\t");
for(String s:currentChilds){
System.out.println(s);
}
}
});
