- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > 編程語(yǔ)言 >
- 如何使用Java操作Zookeeper
Java操作Zookeeper有很多種方式,如zookeeper、zkclient、curator等等,下面介紹下使用zkclient的方式操作Zookeeper。
Maven依賴(lài):
<dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.11</version> </dependency>
創(chuàng )建節點(diǎn):
@Test public void testCreateNode() { //建立連接 //zkServers: Zookeeper服務(wù)器IP地址和端口號,如果是集群情況下用逗號分割多個(gè)Zookeeper服務(wù)器地址 //sessionTimeout: 會(huì )話(huà)超時(shí)時(shí)間 //connectionTimeout: 連接超時(shí)時(shí)間 ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000); //創(chuàng )建數據 Student student = new Student(); student.setName("張三"); student.setAge(18); student.setPhone("1585454xxxx"); //創(chuàng )建持久節點(diǎn) zkClient.createPersistent("/p_node", student); //創(chuàng )建持久順序節點(diǎn) zkClient.createPersistentSequential("/ps_node", student); //創(chuàng )建臨時(shí)節點(diǎn) zkClient.createEphemeral("/e_node", student); //創(chuàng )建臨時(shí)順序節點(diǎn) zkClient.createEphemeralSequential("/ps_node", student); //關(guān)閉客戶(hù)端 //關(guān)閉客戶(hù)端的同時(shí),前面創(chuàng )建的臨時(shí)節點(diǎn)也會(huì )被刪除 zkClient.close(); }
讀取節點(diǎn)數據:
@Test public void testReadNodeData() { ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000); Stat stat = new Stat(); Student student = zkClient.readData("/p_node", stat); System.out.println("節點(diǎn)狀態(tài)信息:" + JSON.toJSONString(student)); System.out.println("節點(diǎn)數據:" + JSON.toJSONString(stat)); zkClient.close(); } //輸出結果: //節點(diǎn)狀態(tài)信息:{"age":18,"name":"張三","phone":"1585454xxxx"} //節點(diǎn)數據:{"aversion":0,"ctime":1619165355431,"cversion":0,"czxid":165,"dataLength":260,"ephemeralOwner":0,"mtime":1619165355431,"mzxid":165,"numChildren":0,"pzxid":165,"version":0}
刪除節點(diǎn):
@Test public void testDeleteNode() { ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000); //刪除節點(diǎn),不能刪除帶有子節點(diǎn)的節點(diǎn) zkClient.delete("/p_node"); //刪除節點(diǎn),遞歸刪除所有子孫節點(diǎn) zkClient.deleteRecursive("/p_node2"); zkClient.close(); }
更新節點(diǎn)數據:
@Test public void testWriteNodeData() { ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000); //更新節點(diǎn)數據 zkClient.writeData("/p_node", "myData1"); //使用CAS更新節點(diǎn)數據 //zkClient.writeData("/p_node", "myData2", 1); zkClient.close(); }
獲取子節點(diǎn)列表:
@Test public void testGetChildNodes() { ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000); //獲取子節點(diǎn)列表 List<String> childList = zkClient.getChildren("/p_node"); childList.stream().forEach(System.out::println); zkClient.close(); }
Java節點(diǎn)監聽(tīng)都是永久的,觸發(fā)一次后不會(huì )被刪除。
監聽(tīng)節點(diǎn)的子節點(diǎn)變化:
@Test public void testSubscribeChildChanges() throws IOException { ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000); zkClient.subscribeChildChanges("/p_node", new IZkChildListener(){ //子節點(diǎn)改變時(shí)調用 @Override public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception { System.out.println(parentPath + "子節點(diǎn)發(fā)生改變"); System.out.println("當前子節點(diǎn)列表:" + currentChilds); } }); //阻塞客戶(hù)端,便于測試 System.in.read(); }
監聽(tīng)節點(diǎn)數據變化:
@Test public void testSubscribeDataChanges() throws IOException { ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000); zkClient.subscribeDataChanges("/p_node", new IZkDataListener(){ //節點(diǎn)數據改變時(shí)調用 @Override public void handleDataChange(String dataPath, Object data) throws Exception { System.out.println(dataPath + "節點(diǎn)數據發(fā)生變化"); System.out.println("修改后的數據為:" + data.toString()); } //節點(diǎn)被刪除時(shí)調用 @Override public void handleDataDeleted(String dataPath) throws Exception { System.out.println(dataPath + "節點(diǎn)已被刪除"); } }); //阻塞客戶(hù)端,便于測試 System.in.read(); }
監聽(tīng)Zookeeper連接狀態(tài)變化:
@Test public void testSubscribeStateChanges() throws IOException { ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000); zkClient.subscribeStateChanges(new IZkStateListener(){ //當zookeeper連接狀態(tài)改變時(shí)調用 @Override public void handleStateChanged(Watcher.Event.KeeperState state) throws Exception { System.out.println("當前狀態(tài)" + state); } //在zookeeper會(huì )話(huà)過(guò)期并且創(chuàng )建了一個(gè)新的會(huì )話(huà)之后調用 @Override public void handleNewSession() throws Exception { System.out.println("會(huì )話(huà)過(guò)期,已創(chuàng )建新的會(huì )話(huà)"); } //當會(huì )話(huà)不能重新建立時(shí)調用 @Override public void handleSessionEstablishmentError(Throwable error) throws Exception { error.printStackTrace(); } }); //阻塞客戶(hù)端,便于測試 System.in.read(); }
以上就是如何使用Java操作Zookeeper的詳細內容,更多關(guān)于Java操作Zookeeper的資料請關(guān)注腳本之家其它相關(guān)文章!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站