Наблюдатель куратора Zookeeper не получает никаких событий - PullRequest
0 голосов
/ 02 февраля 2019

Я пытался использовать apache куратор для zookeeper, но не смог добиться прогресса.Все, что я ищу, - это установить наблюдатель на узле zk и прослушивать все изменения данных на этом конкретном узле.Я написал простую программу, чтобы попробовать это, но я не получаю никаких событий.Вот мой код:

CuratorFramework curator = new ZookeeperClient(zkHosts).getConnection();

    CompletableFuture.runAsync(() -> {
        CuratorWatcher curatorWatcher = event -> System.out.println("Watched event: " + event);

        try {
            curator.getChildren().usingWatcher(curatorWatcher).forPath(NODE_PATH);
        } catch (Exception e) {
            e.printStackTrace();
        }
    });

    CompletableFuture.runAsync(() -> {
        try {
            curator.setData().forPath(NODE_PATH, "randomdata1".getBytes());
            curator.setData().forPath(NODE_PATH, "randomdata2".getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
    });

Спасибо за помощь!

1 Ответ

0 голосов
/ 03 февраля 2019

В Zookeeper getData () и exist () устанавливают наблюдения данныхgetChildren () устанавливает дочерние часы;см. Часы ZooKeeper для получения более подробной информации

Вы должны использовать curator.getData() вместо curator.getChildren() в первом runAsync(), поскольку вы делаете setData() во втором runAsync().

Если вы хотите оставить curator.getChildren(), то вам нужно добавить нового ребенка под NODE_PATH для тестирования

...