Как получать уведомления при инициализации CachedModeledFramework

#apache-zookeeper #apache-curator

#apache-zookeeper #apache-куратор

Вопрос:

Я использую CachedModeledFramework куратора Apache, чтобы попытаться кэшировать все дочерние узлы в пути. Я хочу получать уведомления при загрузке кэша. Если дочерние элементы существуют, я получаю события 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");
    }
});
 

Ответ №1:

Отредактировал начальный пост с ответом о переопределении инициализированного метода ModeledCacheListener