Zookeeper分布式入门——ZK的Java客户端Curator(5)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_37338761/article/details/100024011

ZK的Java客户端Curator(5)


实践5 监听子节点

StartMode一般选POST_INITIALIZED_EVENT,这个会有提醒初始化成功
如果想细致到对某个节点的监听,可以获取节点的路径: String path = event.getData().getPath(); 判断这个路径来确定节点创建成功失败

final static String ADD_PATH = "/super/imooc/d";


// 为子节点添加watcher
// PathChildrenCache: 监听数据节点的增删改,会触发事件
String childNodePathCache =  nodePath;// cacheData: 设置缓存节点的数据状态
final PathChildrenCache childrenCache = new PathChildrenCache(cto.client, childNodePathCache, true);
/**
 * StartMode: 初始化方式
 * POST_INITIALIZED_EVENT:异步初始化,初始化之后会触发事件
 * NORMAL:异步初始化
 * BUILD_INITIAL_CACHE:同步初始化
 */
childrenCache.start(StartMode.POST_INITIALIZED_EVENT);
		
List<ChildData> childDataList = childrenCache.getCurrentData();
System.out.println("当前数据节点的子节点数据列表:");
for (ChildData cd : childDataList) {
	String childData = new String(cd.getData());
	System.out.println(childData);
}
childrenCache.getListenable().addListener(new PathChildrenCacheListener() {
        public void childEvent(CuratorFramework client,PathChildrenCacheEvent event) throws Exception {
                if(event.getType().equals(PathChildrenCacheEvent.Type.INITIALIZED)){
                  System.out.println("子节点初始化ok...");
                }else if(event.getType().equals(PathChildrenCacheEvent.Type.CHILD_ADDED)){
                  String path = event.getData().getPath();
                  if (path.equals(ADD_PATH)) {
                        System.out.println("添加子节点:" + event.getData().getPath());
                        System.out.println("子节点数据:" + new String(event.getData().getData()));
                    } else if (path.equals("/super/imooc/e")) {
                        System.out.println("添加不正确...");
                    }

                }else if(event.getType().equals(PathChildrenCacheEvent.Type.CHILD_REMOVED)){
                    System.out.println("删除子节点:" + event.getData().getPath());
                }else if(event.getType().equals(PathChildrenCacheEvent.Type.CHILD_UPDATED)){
                    System.out.println("修改子节点路径:" + event.getData().getPath());
                    System.out.println("修改子节点数据:" + new String(event.getData().getData()));
                }
            }
});



猜你喜欢

转载自blog.csdn.net/qq_37338761/article/details/100024011
今日推荐