美文网首页
zookeeper(四)watcher

zookeeper(四)watcher

作者: 若琳丶 | 来源:发表于2020-01-26 23:44 被阅读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 事件。

    结论:

    • 添加 wacher 的命令有三个:ls、get 和 stat。

    相关文章

      网友评论

          本文标题:zookeeper(四)watcher

          本文链接:https://www.haomeiwen.com/subject/huvjthtx.html