5、,服务端会发送给客户端一个“ZNode数据变更“事件,客户端也只能接收到如下信息: KeeperState:SyncConnected EventType:NodeDataChanged Path:/zk-b 也就是说,客户端无法直接从该事件中获取到对应数据节点的原始数据内容,以及变更后的新数据内容。而是客户端再次主动去重新获取数据。——这个也是ZooKeeper一个非常重要的特性。Watcher工作机制服务端发送不处理逻辑、客户端发送并处理逻辑。客户端注册Watcher 创建一个 new ZooKeeper()客户端对象实例时,可以传入一个Watcher.
6、 new ZooKeeper(String connectString,int sessionTimeout,Watcher watcher) 这个Watcher将作为整个ZooKeeper回话期间的默认Watcher,会一直被保存在客户端ZKWatchManager的defaultWatcher中。另外,ZooKeeper客户端也可以通过 getData、getChildren和exist三个接口来向ZooKeeper服务器注册Watcher。列举个getData例: public byte[] getData(String path,boolean wa
7、tch, Stat stat) public byte[] getData(final String path,Watcher watch, Stat stat) 第一个通过一个boolean参数来标识是否使用默认Watcher进行注册,具体注册逻辑与第二个接口一致。注册Watcher后 在getData接口注册Watcher后,客户端首先会对当前客户端请求request进行标记,将其设置为”使