zookeeper(四)watcher

2020-01-26  本文已影响0人  若琳丶

watcher介绍

针对每个节点操作,都会有一个监督者进行监督节点操作行为。当监控的某个 znode 发生变化,则触发 wathcer 事件。zk 中的 watcher 是一次性的,出发后立即销毁。

一、父节点watcher

1.1 创建父节点会触发 NodeCreated 事件

stat /imooc watch

image.png

此处虽然为 “Node deoes not exist:/imooc”,虽然 imooc 节点不存在,但是在 created /imooc 的时候,依然可以正常的给节点添加上 watcher。

此时在执行创建节点命令:

create /imooc node-data

image.png

1.2 修改父节点数据触发 NodeDataChanged 事件

image.png

get 命令同样也可以添加 watcher

get /imooc watch

image.png

此时在对节点进行修改

set /imooc test

修改节点

1.3 删除父节点触发 NodeDeleted 事件

同样先通过 get 命令给节点添加一个事件

get /imooc watch

添加watcher

此时删除节点

delete /imooc

删除触发事件

二、子节点watcher

2.1 创建/删除子节点触发 NodeChildrenChanged 事件

对子节点进行watcher的设置,需要在父节点上进行操作

在父节点上执行 ls /imooc watch
在该父节点上添加子节点 create /imooc/child test

image.png

再创建完成之后,我们先对父节点再次添加上 watcher,然后对子节点进行删除操作

ls /imooc watch
delete /imooc/child

image.png

删除操作还是会触发 NodeChildrenChanged 事件。
为什么创建和删除子节点触发的事件是相同的?因为对子节点的操作,其实也是站在父节点的角度来理解的。无论是子节点的创建还是删除,对于父节点来说,都是对父节点中子节点进行change。

2.2 修改子节点的数据不会触发事件

ls /imooc/child watch
set /imooc/child test-data

image.png

我们发现除了打印修改后的子节点信息之外,并没有打印触发事件的日志。

我们换种方式来添加watcher:

get /imooc/chlid new-data
set /imooc/child new-data

image.png

我们发现通过这种方式可以触发 NodeDataChanged 事件。

结论:

上一篇下一篇

猜你喜欢

热点阅读