我一直在尝试使用Apache馆长饲养员,但没能取得进展。所有我找的是设定一个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();
}
});
感谢您的帮助!
答案 0 :(得分:1)
在Zookeeper中,getData()和exist()设置数据监视。 getChildren()设置儿童手表;有关更多详细信息,请参见ZooKeeper Watches
您应该在第一个curator.getData()
中使用curator.getChildren()
而不是runAsync()
,因为在第二个setData()
中使用runAsync()
。
如果您想保留curator.getChildren()
,则应该在NODE_PATH
下添加一个新的孩子进行测试