Zookeeper Watcher 解析
1.Watcher 接口源码
1.
当客户端向zookeeper注册了watcher时,当服务器向客户端发送一个watcher事件通知时,客户端会调用回调方法process(WatchedEvent event)。
watchedEvent包括了一个事件的三个属性:通知状态、事件类型、节点路径。服务器端将服务器端事件封装成watchedevent 传递给watcher,方便回调函数处理
其中watchedevent是服务器端事件的逻辑对象,通过调用getwarpper方法将watchedevent对象转化为可序列化的watcherevent对象,传输给客户端。客户端收到后将watcherevent还原为watchedEvent对象,供process方法处理。
2.具体过程

简单的讲,客户端在向服务器注册watcher的同时,会将watcher转储到本地的watchermanager中。当zookeeper服务器触发watcher事件之后,会向客户端发送通知,客户端在watchermanager中取出对应的watcher对象来执行回调逻辑
客户端注册watcher:(zkwatchermanger是客户端watcher的管理者)客户端注册watcher之后,会对当前客户端请求进行标记,将其设置为使用watcher监听,同时会封装一个watcher的注册信息watcherRegistration对象,暂时保存数据节点的路径与watcher的对应关系;由于在zookeeper中packet是最小的通信协议单元,用于客户端与服务器端的数据通信,因此,会将watcherregistration包装成一个packet对象,放入发送队列中等待客户端发送;随后客户端向服务器端发送请求,客户端通过sendthread线程的readresponse方法接受响应;finishpacket方法从packet中提取watcher注册到zkwatchermanager中。
服务器端处理watcher:(watchermanager是zookeeper服务器端watcher的管理者)当指定节点执行了某种操作之后,会通过watchermanager的triggerwatcher方法触发相关的事件(封装watchedevent对象,查询watcher,调用process触发watcher通过sendresponse通知客户端)
客户端回调watcher:对于服务器的响应,客户端都是通过sendThread.readresponse统一处理。反序列话,还原watchedevent,回调watcher。sendThread收到通知后,会将事件通过EventThread.queueevent传给EventThread线程,queueevent从zkwatchermanager中取出所有相关的watcher,获得watcher以后将其放入waitingevent队列中,EventThread从waitingevent中去watcher进行处理。
Zookeeper Watcher 解析的更多相关文章
- (转)Zookeeper全解析——Paxos作为灵魂
原计划在介绍完ZK Client之后就着手ZK Server的介绍,但是发现ZK Server所包含的内容实在太多,并不是简简单单一篇Blog就能搞定的.于是决定从基础搞起比较好. 那么ZK Serv ...
- 8.7.ZooKeeper Watcher监听
1.ZooKeeper Watcher ZooKeeper 提供了分布式数据发布/订阅功能,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能让多个订阅者同时监听某一个主题对象, 当这个主题对 ...
- zookeeper Watcher API 说明
Watcher 在 ZooKeeper 是一个核心功能,Watcher 可以监控目录节点的数据变化以及子目录的变化,一旦这些状态发生变化,服务器就会通知所有设置在这个目录节点上的 Watcher,从而 ...
- Zookeeper Watcher接口
在ZooKeeper中,接口类Watcher用于表示一个标准的事件处理器,其定义了事件通知相关的逻辑,包含KeeperState和EventType两个枚举类,分别代表了通知状态和事件类型,同时定义了 ...
- Zookeeper全解析——Client端(转)
Zookeeper的Client直接与用户打交道,是我们使用Zookeeper的interface.了解ZK Client的结构和工作原理有利于我们合理的使用ZK,并能在使用中更早的发现问题.本文将在 ...
- Zookeeper全解析——Paxos作为灵魂(转)
原计划在介绍完ZK Client之后就着手ZK Server的介绍,但是发现ZK Server所包含的内容实在太多,并不是简简单单一篇Blog就能搞定的.于是决定从基础搞起比较好. 那么ZK Serv ...
- Zookeeper全解析——Paxos作为灵魂
原文地址: http://www.spnguru.com/2010/08/zookeeper%E5%85%A8%E8%A7%A3%E6%9E%90%E2%80%94%E2%80%94paxos%E7% ...
- Paxos算法之旅(四)zookeeper代码解析--转载
ZooKeeper是近期比较热门的一个类Paxos实现.也是一个逐渐得到广泛应用的开源的分布式锁服务实现.被认为是Chubby的开源版,虽然具体实现有很多差异.ZooKeeper概要的介绍可以看官方文 ...
- zookeeper watcher
ZooKeeper 的 watcher 机制主要包括客户端线程.客户端 WatchManager 和 ZooKeeper 服务器三部分. 工作方式:客户端在向 zk 服务器注册 Watcher 的同 ...
随机推荐
- .Net程序员学用Oracle系列(2):准备测试环境
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.创建说明 1.1.为什么要创建的测试环境? 1.2.了解 Oracle 实例的默认用户 2.创建环境 2.1.创建基本环境 ...
- SQL Server 2016 的「動態資料遮罩 (Dynamic Data Masking)」
一些特別注重資訊安全.個人資料的公司或產業 (如: 金融.保險業),通常「測試用資料庫」的資料,會加上「遮蔽:去識別化」的功能,避免個資外洩.以往必須自己撰寫 SQL 語句或 Stored Proce ...
- linux面试题集锦4《转》
四.编程与应用题: 1.用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下. 参考程序: #!/bin/sh FILENAME= echo “Input file na ...
- configure HDFS(hadoop 分布式文件系统) high available
注:来自尚学堂小陈老师上课笔记 1.安装启动zookeeper a)上传解压zookeeper包 b)cp zoo_sample.cfg zoo.cfg修改zoo.cfg文件 c)dataDir=/o ...
- Git提交到多个远程仓库
在已经习惯使用git同步写代码,github无疑是最的托管平台,但是国内由于"你懂的"原因,速度很慢,有时无法访问,于是想把自己的代码同步到多个不同的远程仓库备份. 我的主要仓库: ...
- Shell终端收听音乐--网易云音乐命令行版
Musicbox:网易云音乐命令行版本 高品质网易云音乐命令行版本,简洁优雅,丝般顺滑,基于Python编写. 这款命令行的客户端使用 Python 构建,以 mpg123 作为播放后端: Vim 式 ...
- Ansible Filter
没啥好说的. 自己看吧 http://docs.ansible.com/ansible/playbooks_filters.html
- StringBuffer使用append提示String concatenation as argument to 'StringBuffer.append()' call
昨天发现一个IDE提示: String concatenation as argument to 'StringBuffer.append()' call less... (Ctrl+F1) Repo ...
- CSU 1812 三角形和矩形
湖南省第十二届大学生计算机程序设计竞赛$J$题 计算几何. #pragma comment(linker, "/STACK:1024000000,1024000000") #inc ...
- hdu1032
#include <iostream> using namespace std; int main() { int a,b,t,i,max; while(cin >> a &g ...