zkclient比原生API已经方便了很多。
<dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency>
public class ZkClientApiDemo { private static String ZK_URL = "192.168.1.45:2181,192.168.1.46:2181,192.168.1.41:2181"; private static ZkClient zkClient = null; private static void getInstance(){ if (null == zkClient){ zkClient = new ZkClient(ZK_URL, 10000); } } public static void main(String[] args) throws InterruptedException { getInstance(); String path = "/node"; //创建节点 zkClient.createPersistent(path,"123"); //读取节点的值 Object readData = zkClient.readData(path); System.out.println(readData.toString()); //支持递归创建,比java原生API 方便太多了 zkClient.createPersistent("/zkclient/zkclient1-1/zkclient2-1",true); List<String> children = zkClient.getChildren(path); System.out.println(children); boolean delete1 = zkClient.deleteRecursive("/zkclient"); if (delete1){ System.out.println("递归删除成功!"); } //watcher zkClient.subscribeDataChanges(path, new IZkDataListener() { public void handleDataChange(String s, Object o) throws Exception { System.out.println("节点名称:"+s+"->节点修改后的值:"+o); } public void handleDataDeleted(String s) throws Exception { } }); zkClient.subscribeChildChanges(path, new IZkChildListener() { public void handleChildChange(String s, List<String> list) throws Exception { System.out.println("节点名称:"+s+"->子节点集合:"+list); } }); //修改 zkClient.writeData(path,"我把值修改啦!"); TimeUnit.SECONDS.sleep(2); //新增子节点 zkClient.createPersistent(path+"/node1","node1"); TimeUnit.SECONDS.sleep(2); //修改子节点的值 zkClient.writeData(path+"/node1","node1的值被修改啦!"); TimeUnit.SECONDS.sleep(2); //删除 boolean delete = zkClient.deleteRecursive(path); if (delete){ System.out.println("删除成功!"); } TimeUnit.SECONDS.sleep(2); } }