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 的同 ...
随机推荐
- 以helloworld为例讲解magento中控制器的工作
1.下面介绍的前提是你已经安装了magento ,版本是1.9.1.0. 2.下面是实际步骤 ①在工程下面创建下面的文件目录 app/code/local/Magentotutorial/Hellow ...
- Android屏幕适配问题详解
上篇-Android本地化资源目录详解 :http://www.cnblogs.com/steffen/p/3833048.html 单位: px(像素):屏幕上的点. in(英寸):长度单位. mm ...
- Js 获取当前月的天数
function getDays() { //构造当前日期对象 var date = new Date(); //获取年份 var year = date.getFullYear(); //获取当前月 ...
- Js-Html 前端系列--显示有格式的文本
var dp = $("#dp").val(); var dpXSS = filterXss(dp); document.getElementById("descript ...
- MyEclipse导入Maven项目pom文件第一行报错,运行Tomcat报Log4j错误--解决方法
问题描述: 前一段时间电脑第一次导入Maven项目,又是pom文件错,改好后又是运行Tomcat报Log4j错误,一直倒腾了近一个月程序才成功跑起来,太不容易. 也上网查了很长时间,没一个方法能解决我 ...
- jQuery+HTML5声音提示
WEB应用中,有时需要播放特定的声音,比如有新消息或者在线聊天消息声音提示,以前我们通过flash实现,今天我们将使用jQuery和HTML5结合示例来实现如何把声音提示带入WEB应用中. 在本例中, ...
- 持续集成CI与自动化测试
-------------------------------------------------------------------------------------------------- ...
- 你确实应该学习并使用的 10 个 C# 特性
1) async / await 使用 async / await 模式,可以在执行代码块操作的时候不会阻塞 UI 或者当前的线程.即使该操作被某些执行动作延迟了(比如一个 web 请求),async ...
- [UWP-小白日记13]Composition动画
前言 首先,来对比下传统动画和Composition动画.看图就能明白composition动画的优势太明显就像官方说的大幅度的降低了动画的实现难度和代码量. 传统的动画,就拿最常见的就是过度动画:进 ...
- CodeForces 689D Friends and Subsequences
枚举,二分,$RMQ$. 对于一个序列来说,如果固定区间左端点,随着右端点的增大,最大值肯定是非递减的,最小值肯定是非递增的. 因此,根据这种单调性,我们可以枚举区间左端点$L$,二分找到第一个位置$ ...