ZooKeeper Watcher机制
Posted 在奋斗的大道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZooKeeper Watcher机制相关的知识,希望对你有一定的参考价值。
Watcher 机制
-
针对每个节点的操作,都会有一个监督者 -> watcher
-
当监控的某个对象(znode)发生了变化,则触发watcher事件
-
zk中的watch是一次性的,触发后立即销毁
-
父节点,子节点 增删改都能够触发其watcher
-
针对不同类型的操作,触发的watcher事件也不同:
-
1.(子)节点创建事件
-
2.(子)节点删除事件
-
3.(子)节点数据变化事件
-
Watcher 事件
-
通过
get path [watch]
设置 watcher -
父节点 增 删 改 操作触发 watcher
-
子节点 增 删 改 操作触发watcher
Watcher 事件类型
父节点Watcher事件
-
创建父节点触发:NodeCreated
-
修改节点数据触发:NodeDatachanged
-
删除节点数据触发:NodeDeleted
操作示例
# 连接zk
$ zkCli.sh -server 127.0.0.1:2181
# 对节点进行watch
$ stat /abc watch
# 创建父节点触发事件
$ create /abc 123
#结果
WARCHER::
WatchedEvent state:SyncConnected type:NodeCreated path:/abc
$ get /abc watch
# 修改节点数据触发
$ set /abc 567
#结果
WARCHER::
WatchedEvent state:SyncConnected type:NodeDatachanged path:/abc
$ create /hello 111
$ get /hello watch
$ delete /hello
#结果
WARCHER::
WatchedEvent state:SyncConnected type:NodeDeleted path:/hello
子节点Watcher事件
-
ls为父节点设置watcher,创建子节点触发:NodeChildrenChanged
-
ls为父节点设置watcher,删除子节点触发:NodeChildrenChanged
-
ls为父节点设置watcher,修改子节点不触发事件
操作
$ ls /abc watch
# 创建子节点事件
$ create /abc/bcd 111
#结果
WARCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/abc
Create /abc/bcd
$ ls /abc watch
$ delete /abc/bcd
#结果
WARCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/abc
$ ls /abc watch
$ create /abc/xyz 111
$ set /abc/xyz 222
# 并没有触发watcher事件
set修改子节点并没有触发事件,你需要像父节点watch那样监控子节点
$ get /abc/xyz watch
$ set /abc/xyz 333
#结果
WARCHER::
WatchedEvent state:SyncConnected type:NodeDatachanged path:/abc/xyz
wather使用场景
-
统一资源配置
以上是关于ZooKeeper Watcher机制的主要内容,如果未能解决你的问题,请参考以下文章
Apache ZooKeeper Watcher机制源码解释