Watcher是一个接口类,有一个接口方法:
由用户来实现,后续我们会讲它如何配合ZooKeeper和ClientCnxn来监控节点。上图ZooKeeper中的watchManager实际上是ZKWatchManager,它实现了ClientWatchManager,内部有三个主要成员变量,
dataWatches监控数据,比如ZooKeeper类的getData方法会触发该监视器,existWatches监控节点是否存在,比如ZooKeeper类的exists方法会触发该监视器,childWatches监控子节点变化,比如ZooKeeper类的create和delete类都会触发该监视器。当用户调用ZooKeeper类的构造函数后,会初始化watchManager,并将该watchManager中的defaultWatcher引用指向该用户watcher,那么这些watcher是怎么配合运行的呢?为了解答这个问题首先我们来了解一下EventType类
readResponse()方法
queueEvent()方法
如上图所示触发了watcher的materialize方法,再来看materialize方法
下面我们举个例子来说明watcher怎么监控ZNode,比如我们使用客户端ZooKeeper类调用exists()函数发出exists请求
它会像服务端发送exists请求,假设服务端返回NodeDataChanged,那么正如上面讲述的流程客户端会触发dataWatches和existWatches。这样就完成了对ZNode的监控。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。