Zookeeper ZkClient使用介紹
前言
接下來,還是從創(chuàng)建會話、創(chuàng)建節(jié)點、讀取數(shù)據(jù)、更新數(shù)據(jù)、刪除節(jié)點等方面來介紹如何使用zkClient 這個zookeeper客戶端
添加依賴:
在pom.xml?件中添加如下內容
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.2</version>
</dependency>1、創(chuàng)建會話
使?ZkClient可以輕松的創(chuàng)建會話,連接到服務端
package com.lagou.zkClient;
import org.I0Itec.zkclient.ZkClient;
public class CreateSession {
/*
借助zkClient完成會話創(chuàng)建
*/
public static void main(String[] args) {
/**
* 創(chuàng)建一個zkClient實例就可以完成連接,完成會話的創(chuàng)建
* serverString : 服務器連接地址
* 注意:zkClient通過對zookeeperAPI內部封裝,將這個異步創(chuàng)建會話的過程同步化了
*/
ZkClient zkClient = new ZkClient("127.0.0.1:2181");
System.out.println("會話被創(chuàng)建了...");
}
}2、創(chuàng)建節(jié)點
ZkClient提供了遞歸創(chuàng)建節(jié)點的接口,即其幫助開發(fā)者先完成父節(jié)點的創(chuàng)建,再創(chuàng)建子節(jié)點
package com.lagou.zkClient;
import org.I0Itec.zkclient.ZkClient;
public class CreateNote {
/*
借助zkClient完成會話創(chuàng)建
*/
public static void main(String[] args) {
/**
* 創(chuàng)建一個zkClient實例就可以完成連接,完成會話的創(chuàng)建
* serverString : 服務器連接地址
* 注意:zkClient通過對zookeeperAPI內部封裝,將這個異步創(chuàng)建會話的過程同步化了
*/
ZkClient zkClient = new ZkClient("127.0.0.1:2181");
System.out.println("會話被創(chuàng)建了...");
// 創(chuàng)建節(jié)點
/**
* createParents:是否要創(chuàng)建父節(jié)點,如果值為true,則就會遞歸創(chuàng)建節(jié)點
*/
zkClient.createPersistent("/lg-zkClient/lg-c1", true);
System.out.println("節(jié)點遞歸創(chuàng)建完成");
}
}值得注意的是,在原生態(tài)接口中是無法創(chuàng)建成功的(?節(jié)點不存在),但是通過ZkClient通過設置createParents參數(shù)為true可以遞歸的先創(chuàng)建父節(jié)點,再創(chuàng)建子節(jié)點
3、刪除節(jié)點
ZkClient提供了遞歸刪除節(jié)點的接口,即其幫助開發(fā)者先刪除所有子節(jié)點(存在),再刪除父節(jié)點
package com.lagou.zkClient;
import org.I0Itec.zkclient.ZkClient;
public class DeleteNote {
/*
借助zkClient完成會話創(chuàng)建
*/
public static void main(String[] args) {
/**
* 創(chuàng)建一個zkClient實例就可以完成連接,完成會話的創(chuàng)建
* serverString : 服務器連接地址
* 注意:zkClient通過對zookeeperAPI內部封裝,將這個異步創(chuàng)建會話的過程同步化了
*/
ZkClient zkClient = new ZkClient("127.0.0.1:2181");
System.out.println("會話被創(chuàng)建了...");
// 遞歸刪除子節(jié)點
String path = "/lg-zkClient/lg-c1";
zkClient.createPersistent(path+"/c11");
zkClient.deleteRecursive(path);
System.out.println("遞歸刪除成功");
}
}結果表明ZkClient可直接刪除帶子節(jié)點的?節(jié)點,因為其底層先刪除其所有子節(jié)點,然后再刪除父節(jié)點
4、獲取子節(jié)點
package com.lagou.zkClient;
import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.ZkClient;
import java.util.List;
public class Get_NoteChildren {
/*
借助zkClient完成會話創(chuàng)建
*/
public static void main(String[] args) throws InterruptedException {
/**
* 創(chuàng)建一個zkClient實例就可以完成連接,完成會話的創(chuàng)建
* serverString : 服務器連接地址
* 注意:zkClient通過對zookeeperAPI內部封裝,將這個異步創(chuàng)建會話的過程同步化了
*/
ZkClient zkClient = new ZkClient("127.0.0.1:2181");
System.out.println("會話被創(chuàng)建了...");
// 獲取子節(jié)點列表
List<String> children = zkClient.getChildren("/lg-zkClient");
System.out.println(children);
// 注冊監(jiān)聽對象
/*
客戶端可以對一個不存在的節(jié)點進行子節(jié)點變更的監(jiān)聽
只要該節(jié)點的子節(jié)點的列表發(fā)生變化,或者該節(jié)點本身被創(chuàng)建或則刪除,都會觸發(fā)監(jiān)聽
*/
zkClient.subscribeChildChanges("/lg-zkClient-get", new IZkChildListener() {
/**
* @param list : 變化后的子節(jié)點列表
*/
@Override
public void handleChildChange(String parentPath, List<String> list) throws Exception {
System.out.println(parentPath + "的子節(jié)點列表發(fā)生了變化,變化后的子節(jié)點列表為" + list);
}
});
// 測試
zkClient.createPersistent("/lg-zkClient-get");
Thread.sleep(1000);
zkClient.createPersistent("/lg-zkClient-get/c1");
Thread.sleep(1000);
}
}結果表明:客戶端可以對?個不存在的節(jié)點進行子節(jié)點變更的監(jiān)聽。?旦客戶端對?個節(jié)點注冊了子節(jié)點列表變更監(jiān)聽之后,那么當該節(jié)點的子節(jié)點列表發(fā)生變更時,服務端都會通知客戶端,并將最新的子節(jié)點列表發(fā)送給客戶端,該節(jié)點本身的創(chuàng)建或刪除也會通知到客戶端。
5、獲取數(shù)據(jù)(節(jié)點是否存在、更新、刪除)
package com.lagou.zkClient;
import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;
public class Note_API {
/*
借助zkClient完成會話創(chuàng)建
*/
public static void main(String[] args) throws InterruptedException {
/**
* 創(chuàng)建一個zkClient實例就可以完成連接,完成會話的創(chuàng)建
* serverString : 服務器連接地址
* 注意:zkClient通過對zookeeperAPI內部封裝,將這個異步創(chuàng)建會話的過程同步化了
*/
ZkClient zkClient = new ZkClient("127.0.0.1:2181");
System.out.println("會話被創(chuàng)建了...");
// 創(chuàng)建節(jié)點
/**
* createParents:是否要創(chuàng)建父節(jié)點,如果值為true,則就會遞歸創(chuàng)建節(jié)點
*/
zkClient.createPersistent("/lg-zkClient/lg-c1", true);
System.out.println("節(jié)點遞歸創(chuàng)建完成");
// 判斷節(jié)點是否存在
String path = "/lg-zkClient-Ep";
boolean exists = zkClient.exists(path);
if (!exists) {
// 創(chuàng)建臨時節(jié)點
zkClient.createEphemeral(path, "123");
}
// 讀取節(jié)點內容
Object o = zkClient.readData(path);
System.out.println(o);
// 注冊監(jiān)聽
zkClient.subscribeDataChanges(path, new IZkDataListener() {
/*
當節(jié)點數(shù)據(jù)內容發(fā)生變化時,執(zhí)行的回調方法
s : path
o : 變化后的節(jié)點內容
*/
@Override
public void handleDataChange(String s, Object o) throws Exception {
System.out.println(s + ":該節(jié)點內容被更新,更新后的內容:" + o);
}
/*
當節(jié)點被刪除時,會執(zhí)行的回調方法
s : path
*/
@Override
public void handleDataDeleted(String s) throws Exception {
System.out.println(s + ":該節(jié)點被刪除");
}
});
// 更新節(jié)點內容
zkClient.writeData(path, "456");
Thread.sleep(2000);
// 刪除節(jié)點
zkClient.delete(path);
Thread.sleep(2000);
}
}到此這篇關于Zookeeper ZkClient使用介紹的文章就介紹到這了,更多相關Zookeeper ZkClient內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot實現(xiàn)數(shù)據(jù)預熱的方式小結
這里用到的數(shù)據(jù)預熱,就是在項目啟動時將一些數(shù)據(jù)量較大的數(shù)據(jù)加載到緩存中(筆者這里用的Redis),那么在項目啟動有哪些方式可以實現(xiàn)數(shù)據(jù)預熱呢,本文就來給大家講講幾種實現(xiàn)數(shù)據(jù)預熱的方式,需要的朋友可以參考下2023-09-09
Java多態(tài)(動力節(jié)點Java學院整理)
多態(tài)是指允許不同類的對象對同一消息做出響應。即同一消息可以根據(jù)發(fā)送對象的不同而采用多種不同的行為方式。接下來通過本文給大家介紹java多態(tài)相關知識,感興趣的朋友一起學習吧2017-04-04
Spring Boot Mail QQ企業(yè)郵箱無法連接解決方案
這篇文章主要介紹了Spring Boot Mail QQ企業(yè)郵箱無法連接解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09
SpringBoot指標監(jiān)控功能實現(xiàn)
這篇文章主要介紹了SpringBoot指標監(jiān)控功能實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06

