public class GetNode implements Watcher{
private static CountDownLatch countDownLatch = new CountDownLatch(1);
private static ZooKeeper zooKeeper;
public static void main(String[] args) throws IOException, InterruptedException {
/**
* 客户端可以通过创建一个zk实例来连接zk服务器
* new Zookeeper(connectString,sessionTimeOut,Watcher)
* connectString:连接地址:IP:端口
* sessionTimeOut:会话超时时间:单位毫秒
* Wather:监听器(当特定时间出发监听时,zk会通过watcher通知到客户端)
*/
zooKeeper = new ZooKeeper("101.132.167.18:2181", 5000, new GetNode());
System.out.println(zooKeeper.getState());
//countDownLatch.await();
System.out.println("客户端与服务端会话真正建立了");
Thread.sleep(Integer.MAX_VALUE);
}
/**
* 回调方法:处理来自服务器端的watcher通知
*/
@Override
public void process(WatchedEvent watchedEvent) {
// SyncConnected
if(watchedEvent.getState() == Watcher.Event.KeeperState.SyncConnected){
//解除主程序在CountDownLatch上的等待阻塞
//countDownLatch.countDown();
System.out.println("process方法执行了......");
try {
getNoteSync();
getChildrens();
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 读取节点信息
*/
private void getNoteSync() throws KeeperException, InterruptedException {
/**
* path : 获取数据的路径
* watch : 是否开启监听
* stat : 节点状态信息
* null : 表示获取最新版本的数据
* zk.getData(path,watch,stat);
*/
byte[] data = zooKeeper.getData("/persistent", false, null);
System.out.println(new String(data));
}
/**
* 获取某个子节点列表方法
*/
private void getChildrens() throws KeeperException, InterruptedException {
/**
* path : 路径
* watch : 是否要启动监听,当子节点列表发生变化,会出发监听
* zooKeeper.getChildrens(path,watch);
*/
List<String> children = zooKeeper.getChildren("/persistent",true);
System.out.println(children);
}
}
zookeeper 读取节点及其下一级子节点信息
于 2023-05-10 09:57:02 首次发布