【发布时间】:2020-12-16 17:57:46
【问题描述】:
我正在使用 Apache Curator 的 CachedModeledFramework 尝试缓存路径中的所有子节点。我想在加载缓存时收到通知。如果孩子存在,我确实从侦听器那里得到了 NODE_ADDED 事件,但是我找不到任何方法在它完全缓存时得到通知,即使还没有孩子。我无法使用 readThrough 或 readThroughAsZNode,因为 ZPath 未解析。
此外,modeledClient.cached() 行会产生“CuratorCache 不支持自定义 ExecutorService”警告,即使我没有传入执行程序(如果我确实通过了执行程序,也会显示相同的警告)。
private static final ModelSpec<Monitor> monitorSpec = ModelSpec.builder(ZPath.parseWithIds("/monitors/{id}"), JacksonModelSerializer.build(Monitor.class)).build();
private CachedModeledFramework<Monitor> cached;
public void init() {
AsyncCuratorFramework async = AsyncCuratorFramework.wrap(CuratorMgr.getClient());
ModeledFramework<Monitor> modeledClient = ModeledFramework.wrap(async, monitorSpec);
cached = modeledClient.cached();
cached.start();
cached.listenable().addListener((type, path, stat, model) -> {
logger.info("LISTENER {} {}", type, path);
});
}
编辑
我找到了答案。 ModeledCacheListener 有一个我可以重写的初始化方法。
cached.listenable().addListener(new ModeledCacheListener<Monitor>() {
@Override
public void accept(ModeledCacheListener.Type type, ZPath path, Stat stat, Monitor model) {
logger.info("LISTENER {} {}", type, path);
}
@Override
public void initialized() {
ModeledCacheListener.super.initialized();
logger.info("INITIALIZED");
}
});
【问题讨论】:
标签: apache-zookeeper apache-curator