ZooKeeper源码解析(三):Watcher如何监控ZNode
来源:互联网 发布:java寻路算法 编辑:程序博客网 时间:2024/05/16 14:47
Watcher是一个接口类,有一个接口方法:
由用户来实现,后续我们会讲它如何配合ZooKeeper和ClientCnxn来监控节点。上图ZooKeeper中的watchManager实际上是ZKWatchManager,它实现了ClientWatchManager,内部有三个主要成员变量,
dataWatches监控数据,比如ZooKeeper类的getData方法会触发该监视器,existWatches监控节点是否存在,比如ZooKeeper类的exists方法会触发该监视器,childWatches监控子节点变化,比如ZooKeeper类的create和delete类都会触发该监视器。当用户调用ZooKeeper类的构造函数后,会初始化watchManager,并将该watchManager中的defaultWatcher引用指向该用户watcher,那么这些watcher是怎么配合运行的呢?为了解答这个问题首先我们来了解一下EventType类
这几个事件类型的含义请参考http://blog.csdn.net/yinwenjie/article/details/47685077,再来看看watchManager怎么管理这些Watcher的。我们先看看ClientCnxn类的readResponse()和queueEvent()方法
readResponse()方法
queueEvent()方法
如上图所示触发了watcher的materialize方法,再来看materialize方法
当事件类型为None时,也就是客户端和服务端的租约到期,或者认证失败或者断开连接或者建立连接时(建立连接时不会清除watcher,除了参考http://blog.csdn.net/yinwenjie/article/details/47685077)客户端收到反馈后会返回所有事件并触发,当事件类型是节点数据变化或者节点创建时则触发dataWatches和existWatches,当事件类型是子节点变化时childWatches被触发,当事件类型是删除节点时三种watcher都会触发。
下面我们举个例子来说明watcher怎么监控ZNode,比如我们使用客户端ZooKeeper类调用exists()函数发出exists请求
它会像服务端发送exists请求,假设服务端返回NodeDataChanged,那么正如上面讲述的流程客户端会触发dataWatches和existWatches。这样就完成了对ZNode的监控。
0 0
- ZooKeeper源码解析(三):Watcher如何监控ZNode
- zookeeper监控znode
- 【Apache ZooKeeper】为ZNode设置watcher
- Zookeeper源码分析之Watcher机制(三)
- zookeeper学习心得三:Watcher
- Zookeeper源码分析:Watcher机制
- 【Zookeeper】源码分析之Watcher机制(一)
- Zookeeper源码分析之Watcher机制(一)
- Zookeeper源码分析之Watcher机制(二)
- Zookeeper--Apache ZooKeeper Watcher 机制源码解释
- vue如何实现observer和watcher源码解析
- ZooKeeper源码解析(二):用户如何和ZooKeeper交互
- Zookeeper(五)Watcher机制
- Apache ZooKeeper Watcher 机制源码解释
- Apache ZooKeeper Watcher 机制源码解释
- Zookeeper如何正确设置和获取watcher
- Zookeeper如何正确设置和获取watcher
- Zookeeper--Watcher
- ubuntu配置unix网络编程源码
- Editplus 注册
- 二叉树的创建,前序,中序,后序,层序遍历
- maven配置第三方jar包
- FLV文件(H264 + AAC)格式超详细分析
- ZooKeeper源码解析(三):Watcher如何监控ZNode
- LINUX 手动建立SWAP文件及删除
- Sublime3 c++格式化
- 日语随记
- WIFI和蓝牙技术
- 1019. 数字黑洞 (20)
- hdu 1253 胜利大逃亡 (代码详解)解题报告
- 数据结构学习笔记(二)
- QTableWidget的使用