Как использовать Zookeeper с куратором для управления конфигурацией?

Я продолжаю читать об использовании zookeeper для управления конфигурацией.

Я знаю, что есть Apache Curator для легкого взаимодействия с zookeeper.

У меня есть несколько клиентов, подключенных к набору ресурсов. И они должны использовать эти ресурсы одинаково. Вещи как осколки и мастерские выборы между ресурсами.

Я хочу использовать zookeeper, чтобы, если клиент в определенный момент времени заметил, что один из ресурсов не работает, он может изменить конфигурацию, а другие клиенты могут немедленно начать использовать новую конфигурацию.

Таким образом, один клиент записывает конфигурацию в путь в znode в zookeeper, а другие клиенты следят за этим путем.

Как установить данные в кураторе:

zk.setData().forPath(pathName, "data".getBytes());

Как посмотреть дорожку в кураторе:

zk.getData().usingWatcher(watcher).forPath(pathName);

Теперь, когда значение пути изменяется и часы запускаются, я должен получить новое значение пути. Как я могу это сделать?

Это всегда возвращает ноль внутри процесса ()

zk.getData().watched().inBackground().forPath(pathName)

Другой вопрос: как сказано в документации, после того, как я получу новое значение, нужно ли снова устанавливать наблюдатель?

Источник наблюдателя:

CuratorWatcher watcher = new CuratorWatcher(){

                public void process(WatchedEvent event) {
                    System.out.println("event wt");
                    System.out.println(ToStringBuilder.reflectionToString(event));
                    try {
                        System.out.println(zk.getData().watched().inBackground().forPath(pathName));
                    } catch (Exception e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    };
                    System.out.println("event wt");

                    try {
                        zk.getData().usingWatcher(this).forPath(pathName);
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }};

1 ответ

В кураторе есть адаптер:

 * Get children and set the given watcher on the node.
         */
 return client.getChildren().usingWatcher(watcher).forPath(path);

или вы можете использовать CuratorListener

/**
         * Get children and set a watcher on the node. The watcher notification will come through the
         * CuratorListener (see setDataAsync() above).
         */
        return client.getChildren().watched().forPath(path);
Другие вопросы по тегам