Zookeeper 初始化CachedModeledFramework时如何收到通知

busg9geu  于 2022-12-09  发布在  Apache
关注(0)|答案(1)|浏览(108)

我正在使用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");
    }
});
sbtkgmzw

sbtkgmzw1#

编辑了最初的帖子,回答是重写ModeledCacheListener的初始化方法

相关问题