【问题标题】:How to be notified when CachedModeledFramework is initializedCachedModeledFramework 初始化时如何通知
【发布时间】: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


    【解决方案1】:

    用覆盖ModeledCacheListener的初始化方法的答案编辑了初始帖子

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      • 2019-02-09
      • 2023-02-20
      • 1970-01-01
      相关资源
      最近更新 更多