前面簡單研究了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); } } });