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使用场景
统一资源配置
Last updated
Was this helpful?