动物园管理员馆长观察家不接受任何事件

时间:2019-02-02 05:22:49

标签: apache-zookeeper apache-curator

我一直在尝试使用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();
        }
    });

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在Zookeeper中,getData()和exist()设置数据监视。 getChildren()设置儿童手表;有关更多详细信息,请参见ZooKeeper Watches

您应该在第一个curator.getData()中使用curator.getChildren()而不是runAsync(),因为在第二个setData()中使用runAsync()

如果您想保留curator.getChildren(),则应该在NODE_PATH下添加一个新的孩子进行测试