Zookeeper中的Watch机制的原理?

前言

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

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

java 复制代码
Watch机制采用了Push的方式来实现,也就是说客户端和ZookeeperServer会建立一个长连接,一旦监听的指定节点发生了变化,就会通过这个长连接把变化的事件推送给客户端。
Watch的具体流程分为几个部分:
首先,是客户端通过指定命令比如exists、get,对特定路径增加watch然后服务端收到请求以后,用HashMap保存这个客户端会话以及对应关注的节点路径,同时客户端也会使用HashMap存储指定节点和事件回调函数的对应关系。
当服务端指定被watch的节点发生变化后,就会找到这个节点对应的会话,把变化的事件和节点信息发给这个客户端。客户端收到请求以后,从ZkWatcherManager里面对应的回调方法进行调用,完成事件变更的通知。
相关推荐
WaaTong8 分钟前
《重学Java设计模式》之 原型模式
java·设计模式·原型模式
m0_743048448 分钟前
初识Java EE和Spring Boot
java·java-ee
AskHarries10 分钟前
Java字节码增强库ByteBuddy
java·后端
佳佳_25 分钟前
Spring Boot 应用启动时打印配置类信息
spring boot·后端
小灰灰__30 分钟前
IDEA加载通义灵码插件及使用指南
java·ide·intellij-idea
夜雨翦春韭34 分钟前
Java中的动态代理
java·开发语言·aop·动态代理
程序媛小果1 小时前
基于java+SpringBoot+Vue的宠物咖啡馆平台设计与实现
java·vue.js·spring boot
掘金-我是哪吒1 小时前
微服务mysql,redis,elasticsearch, kibana,cassandra,mongodb, kafka
redis·mysql·mongodb·elasticsearch·微服务
追风林1 小时前
mac m1 docker本地部署canal 监听mysql的binglog日志
java·docker·mac
芒果披萨1 小时前
El表达式和JSTL
java·el