Я пытался использовать куратор 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();
}
});
Спасибо за помощь!





В Zookeeper методы getData() и exists() устанавливают наблюдение за данными. getChildren() устанавливает дочерние часы; см. Часы ZooKeeper для более подробной информации
Вы должны использовать curator.getData() вместо curator.getChildren() в первом runAsync(), так как вы используете setData() во втором runAsync().
Если вы хотите сохранить curator.getChildren(), вам следует добавить нового потомка под NODE_PATH для тестирования.
Спасибо! Я также понял, что часы — это разовое событие, поэтому я установил больше часов для непрерывного уведомления.