java客戶端連接zookeeper
一、使用官方的maven依賴:
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.10</version> </dependency>
代碼:
ZooKeeper zooKeeper = new ZooKeeper("192.168.233.11:2182,192.168.233.11:2183,192.168.233.11:2184", 20000, new Watcher() { @Override public void process(WatchedEvent event) { String path = event.getPath(); System.out.println("path:"+path); System.out.println("state:"+event.getState()); System.out.println("type: "+event.getType()); System.out.println("wrapper: "+event.getWrapper()); } }); /** * //創建永久節點 * zooKeeper.create("/lock/pp","aaaa".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); * //創建永久順序節點 * String response = zooKeeper.create("/lock/pp", "aaaa".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); * //創建臨時節點 * zooKeeper.create("/lock/temp","aaaa".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); * //創建臨時順序節點 * zooKeeper.create("/lock/temp","aaaa".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); * //查詢節點的數據 * byte[] data = zooKeeper.getData("/lock/pp", false, null); * * //修改節點的數據 * zooKeeper.setData("/lock/pp", "bbd".getBytes(StandardCharsets.UTF_8), 0); * * //判斷路徑是否存在 * zooKeeper.exists("/lock/pp33", false); * //刪除節點 * zooKeeper.delete("/lock",0);
//遞歸刪除使用
ZKUtil.deleteRecursive(zk,"/lock") */ //注冊事件 List<String> children = zooKeeper.getChildren("/lock/pp", new Watcher() { @Override public void process(WatchedEvent event) { System.out.println("收到回調事件。。。。。。。。。。。。。。。。。。。。"); String path = event.getPath(); System.out.println("path:" + path); System.out.println("state:" + event.getState()); System.out.println("type: " + event.getType()); System.out.println("wrapper: " + event.getWrapper()); } }); //創建子節點,觸發事件 zooKeeper.create("/lock/pp/ll","aaaa".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); TimeUnit.SECONDS.sleep(15);
方案二、第三方對官方依賴的封裝:
<dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency>
代碼:
package com.example.mybatis.demo_mybatis; import org.I0Itec.zkclient.IZkChildListener; import org.I0Itec.zkclient.ZkClient; import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.sql.Statement; import java.util.List; import java.util.concurrent.TimeUnit; /** * author: yangxiaohui * date: 2023/7/10 */ public class Test { public static void main(String[] args) throws InterruptedException { ZkClient zkClient = new ZkClient("192.168.233.11:2182,192.168.233.11:2183,192.168.233.11:2184",20); //創建永久節點 // zkClient.create("/lock/nn","aa",CreateMode.PERSISTENT); //獲取節點數據 // Object o = zkClient.readData("/lock/nn"); //創建永久順序節點 //zkClient.createPersistentSequential("/lock/nn","aa"); //修改數據 // zkClient.writeData("/lock/nn","dd"); //遞歸刪除 // zkClient.deleteRecursive("/lock/nn"); //開啟監控 zkClient.subscribeChildChanges("/lock", new IZkChildListener() { @Override public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception { System.out.println("收到回調"); System.out.println("parentPath: "+parentPath+"currentChild: "+currentChilds); } }); //創建子節點 zkClient.create("/lock/nnd","cc",CreateMode.EPHEMERAL); TimeUnit.SECONDS.sleep(20); } }

浙公網安備 33010602011771號