Zookeeper中的Watch机制的原理?

前言

Zookeeper是一个分布式协调组件,为分布式架构下的多个应用组件提供了顺序访问控制能力。它的数据存储采用了类似于文件系统的树形结构,以节点的方式来管理存储在Zookeeper上的数据

Zookeeper提供了一个Watch机制,可以让客户端感知到ZookeeperServer 上存储的数据变化,这样一种机制可以让Zookeeper实现很多的场景,比如配 置中心、注册中心等。

java 复制代码
Watch机制采用了Push的方式来实现,也就是说客户端和ZookeeperServer会建立一个长连接,一旦监听的指定节点发生了变化,就会通过这个长连接把变化的事件推送给客户端。
Watch的具体流程分为几个部分:
首先,是客户端通过指定命令比如exists、get,对特定路径增加watch然后服务端收到请求以后,用HashMap保存这个客户端会话以及对应关注的节点路径,同时客户端也会使用HashMap存储指定节点和事件回调函数的对应关系。
当服务端指定被watch的节点发生变化后,就会找到这个节点对应的会话,把变化的事件和节点信息发给这个客户端。客户端收到请求以后,从ZkWatcherManager里面对应的回调方法进行调用,完成事件变更的通知。
相关推荐
你怎么知道我是队长1 小时前
C语言---未定义行为
java·c语言·开发语言
没有bug.的程序员1 小时前
Java 序列化:Serializable vs. Protobuf 的性能与兼容性深度对比
java·开发语言·后端·反射·序列化·serializable·protobuf
愚公移码1 小时前
蓝凌EKP产品:主文档权限机制浅析
java·前端·数据库·蓝凌
Remember_9931 小时前
【LeetCode精选算法】滑动窗口专题一
java·数据结构·算法·leetcode·哈希算法
开开心心就好1 小时前
音频编辑工具,多端支持基础剪辑易操作
java·网络·windows·java-ee·电脑·maven·excel
此生只爱蛋2 小时前
【Redis】持久化
数据库·redis
凯子坚持 c2 小时前
Protocol Buffers C++ 进阶数据类型与应用逻辑深度解析
java·服务器·c++
黎雁·泠崖2 小时前
Java面向对象:对象内存图+成员与局部变量
java·开发语言
窗边鸟2 小时前
小白日记之java方法(java复习)
java·学习
burning_maple2 小时前
redis笔记
数据库·redis·笔记