默认的 zookeeper watcher 是做什么的?

What does the default zookeeper watcher do?

这是获取znode数据的方法。

public byte[] getData(String path,
                      boolean watch,
                      Stat stat)
               throws KeeperException,
                      InterruptedException;

我对第二个参数 boolean watch 很好奇,主要是我把 false 放在那里。但是如果我通过true,Zookeeper会做什么呢?据我所知,将调用默认观察者。它有什么作用?

如果 znode 的数据发生变化,或者 znode 被删除,如果为 watch 传递 true,将向客户端发送一个事件。客户端将调用默认观察器(您传递给构造 Zookeeper 客户端对象)对象的 process 方法。 process 方法被传递给 WatchedEvent 对象。我们可以从事件对象中获取事件类型、znode 路径(如果事件特定于 znode)等。例如,如果事件类型类似于 "NodeDataChanged",则可能会调用 Zookeeper 以获取修改后的数据并重新建立监视。基本上,默认观察者实现了 "process" 方法,"process" 方法具有处理事件的逻辑。

您可以查看以下链接: http://zookeeper.apache.org/doc/r3.4.1/api/org/apache/zookeeper/WatchedEvent.html https://zookeeper.apache.org/doc/r3.3.3/api/org/apache/zookeeper/Watcher.html

顺便说一句,zkclient 是更简单的 zookeeper 客户端库。你也可以试试 http://mvnrepository.com/artifact/com.101tec/zkclient