curator 节点类型
基于 curator 5.x
原生的 zookeeper 需要每次注册watcher 才可以监听,curator 提供了三种类型节点的监听,可以反复使用
NodeCache
- 对一个节点进行监听,监听事件包括指定路径的增删改操作,
- 可以深度监听, 如监听了
/node
, 则对 其底下的创建修改,删除都能操作,如创建/node/bb/cc
PathChildrenCache
- 对指定路径节点的所有子目录监听,不对该节点的操作监听,对其子目录的增删改操作监听
TreeCache
- 综合NodeCache和PathChildrenCahce的特性,是对整个目录进行监听,可以设置监听深度
NodeCache
public void nodeListener() {
CuratorCache cache = CuratorCache.builder(client, "/node").build();
CuratorCacheListener listener = CuratorCacheListener.builder().forAll(new CuratorCacheListener() {
@Override
public void event(Type type, ChildData oldData, ChildData data) {
switch (type) {
case NODE_CHANGED:
System.out.println("单节点变化: " + type + ":" + data.getPath());
break;
case NODE_CREATED:
System.out.println("单节点变化: " + type + ":" + data.getPath());
break;
case NODE_DELETED:
System.out.println("单节点变化: " + type + ":" + oldData.getPath());
break;
default:
break;
}
}
}).build();
cache.listenable().addListener(listener);
cache.start();
}
结果:
单节点变化: NODE_CREATED:/node
单节点变化: NODE_CREATED:/node/cc
单节点变化: NODE_CREATED:/node/cc/aa
单节点变化: NODE_DELETED:/node/cc/aa
单节点变化: NODE_DELETED:/node/cc
单节点变化: NODE_CREATED:/node/cc
单节点变化: NODE_CHANGED:/node/cc
单节点变化: NODE_DELETED:/node/cc
单节点变化: NODE_DELETED:/node
PathChildrenCache
当前监听 /path
, 只对当前节点的子节点操作监听有效,对当前节点 /path
任何操作都不会产生监听
public void pathChildrenCacheListener() {
CuratorCache cache = CuratorCache.builder(client, "/path").build();
CuratorCacheListener listener = CuratorCacheListener.builder().forPathChildrenCache("/path", client,
new PathChildrenCacheListener() {
@Override
public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
PathChildrenCacheEvent.Type type = event.getType();
if (event.getData() != null) {
String pt = event.getData().getPath();
System.out.println("PathChild-节点变化:" + type + ":" + pt);
} else {
System.out.println("PathChild-节点变化:" + type);
}
}
}).build();
cache.listenable().addListener(listener);
cache.start();
}
结果
PathChild-节点变化:CHILD_ADDED:/path/bb
PathChild-节点变化:CHILD_ADDED:/path/bb/cc
PathChild-节点变化:CHILD_UPDATED:/path/bb/cc
PathChild-节点变化:CHILD_REMOVED:/path/bb/cc
PathChild-节点变化:CHILD_REMOVED:/path/bb