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进行处理。

最新文章

  1. python 数据类型---列表使用之三
  2. 响应式web网站设计制作方法
  3. x01.Weiqi.8: 一点改进
  4. ThinkCmfX模板常量
  5. uTenux——软件底层驱动组织结构介绍
  6. Apache 2.4 多站点配置记录
  7. idea sass scss配置
  8. [原创]Python入门到简单网站目录扫描器编写(上)
  9. sql server 数据库附加时程序集错误
  10. <meta>标签的作用
  11. 一些常用的操作MySQL数据库的sql语句
  12. for for-in foreach 循环
  13. javascript中 for-in和 for-of的区别
  14. 注册驱动MySQL的驱动程序
  15. base大家族详解
  16. Ibatis基础知识:#与$的差别
  17. Nginx 图片服务器搭建
  18. Appium的安装-Mac平台(命令行 & dmg)
  19. 课时10.第一个HTML网页(掌握)
  20. 自定义注解日志功能与shrio框架冲突的问题

热门文章

  1. Kafka分布式集群搭建
  2. 【解惑】剖析float型的内存存储和精度丢失问题
  3. 关于ABP——领域服务的思考
  4. java框架之struts2简介
  5. 关于IO多路复用的一篇好文
  6. 借助OpenOffice实现office转pdf(Java)的.exe小程序
  7. js遍历数组对象和非数组对象
  8. vue+vuex初入门
  9. canvas实现画板功能(渐变、动画、阴影...)
  10. 使用FormData,进行Ajax请求并上传文件