我正在使用Apache Curator的CachedModeledFramework来缓存路径中的所有子节点。我希望在加载该高速缓存时得到通知。如果子节点存在,我会从侦听器中获得NODE_ADDED事件,但我找不到任何方法来在完全缓存时得到通知,即使还不存在子节点。我无法使用readThrough或readThroughAsZNode,因为ZPath没有解析。
此外,即使我没有传递执行程序,modeledClient.cached()
行也会产生“CuratorCache does not support custom 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");
}
});
1条答案
按热度按时间sbtkgmzw1#
编辑了最初的帖子,回答是重写ModeledCacheListener的初始化方法