zookeeper学习笔记之-Zookeeper中的Watch

本文详细介绍了Zookeeper中的Watcher机制,包括数据监视dataWatches、子节点监视childWatches和存在性监视existWatches。Watcher事件类型如NodeDataChanged、NodeCreated、NodeChildrenChanged和NodeDeleted触发的不同Watche,并探讨了不同操作如何触发这些事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

watcher 机制主要提供了服务通知功能

 

Watche的分类

客户端三类,服务端两类

  1. dataWatches:表示监听的是某节点的数据变化,比如数据的新增、修改、删除
  2. childWathes:表示监听的是某节点的孩子节点的变化,如果某个节点新增或删除了,会触发其父节点上的NodeChildrenChanged事件
  3. existWatches(只在客户端):服务端无需单独触发该事件,由客户端接收其他事件自己判断,比如客户端接收到一个NodeCreated事件,客户端如果注册了existWatches,那么existWatches就会被触发。

 

 

不同的Watcher事件类型会触发哪些Watche

 

  • None
    • defaultWatcher
    • 所有dataWatches(触发完可能清空)
    • 所有existWatches(触发完可能清空)
    • 所有childWatches(触发完可能清空)
    • 所有的persistentWatches
    • 所有的persistentRecursiveWatches
  • NodeDataChanged
  • NodeCreated
    • 对应path的dataWatches(立马移除,先移除再执行)
    • 对应path的existWatches(立马移除,先移除再执行,如果绑定了existWatche,当节点被新增或修改时触发)
    • 对应path的persistentWatches
    • 对应path的每层父path对应的persistentRecursiveWatches(这里有点难理解,persistentRecursiveWatches中存储的就是Watcher,这里根据当前WatchedEvent对应的path,找到该path的各层父path,然后再遍历各层父path,根据父path去从persistentRecursiveWatches集合中找当前父path是不是有对应的Watcher,如果有就添加到result中去,等待执行,这就是递归,一个子节点的数据发生了变化,父节点上的Watcher也能被触发)
  • NodeChildrenChanged
    • 对应path的childWatches(立马移除,先移除再执行)
    • 对应path的persistentWatches
    • 对应path的每层父path对应的persistentRecursiveWatches
  • NodeDeleted
    • 对应path的dataWatches(立马移除,先移除再执行)
    • 对应path的existWatches(立马移除,先移除再执行,如果绑定了existWatche,当节点被删除时触发)
    • 对应path的childWatches(立马移除,先移除再执行)
    • 对应path的persistentWatches
    • 对应path的每层父path对应的persistentRecursiveWatches

 

不同的操作触发的Watcher事件类型

 

  • 创建节点
    • 触发当前节点的NodeCreated事件
    • 触发当前节点的父节点的NodeChildrenChanged事件
  • 删除节点
    • 触发当前节点的NodeDeleted事件
    • 触发当前节点的父节点的NodeChildrenChanged事件
  • 修改节点
    • 触发当前节点的NodeDataChanged事件

 

注意NodeChildrenChanged事件不会触发persistentRecursiveWatches

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值