zookeeper(四)watcher

watcher介紹

針對每個節(jié)點操作,都會有一個監(jiān)督者進行監(jiān)督節(jié)點操作行為。當監(jiān)控的某個 znode 發(fā)生變化,則觸發(fā) wathcer 事件。zk 中的 watcher 是一次性的,出發(fā)后立即銷毀。

一、父節(jié)點watcher

1.1 創(chuàng)建父節(jié)點會觸發(fā) NodeCreated 事件

stat /imooc watch

image.png

此處雖然為 “Node deoes not exist:/imooc”,雖然 imooc 節(jié)點不存在,但是在 created /imooc 的時候,依然可以正常的給節(jié)點添加上 watcher。

此時在執(zhí)行創(chuàng)建節(jié)點命令:

create /imooc node-data

image.png

1.2 修改父節(jié)點數(shù)據(jù)觸發(fā) NodeDataChanged 事件

image.png

get 命令同樣也可以添加 watcher

get /imooc watch

image.png

此時在對節(jié)點進行修改

set /imooc test

修改節(jié)點

1.3 刪除父節(jié)點觸發(fā) NodeDeleted 事件

同樣先通過 get 命令給節(jié)點添加一個事件

get /imooc watch

添加watcher

此時刪除節(jié)點

delete /imooc

刪除觸發(fā)事件

二、子節(jié)點watcher

2.1 創(chuàng)建/刪除子節(jié)點觸發(fā) NodeChildrenChanged 事件

對子節(jié)點進行watcher的設置,需要在父節(jié)點上進行操作

在父節(jié)點上執(zhí)行 ls /imooc watch
在該父節(jié)點上添加子節(jié)點 create /imooc/child test

image.png

再創(chuàng)建完成之后,我們先對父節(jié)點再次添加上 watcher,然后對子節(jié)點進行刪除操作

ls /imooc watch
delete /imooc/child

image.png

刪除操作還是會觸發(fā) NodeChildrenChanged 事件。
為什么創(chuàng)建和刪除子節(jié)點觸發(fā)的事件是相同的?因為對子節(jié)點的操作,其實也是站在父節(jié)點的角度來理解的。無論是子節(jié)點的創(chuàng)建還是刪除,對于父節(jié)點來說,都是對父節(jié)點中子節(jié)點進行change。

2.2 修改子節(jié)點的數(shù)據(jù)不會觸發(fā)事件

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

image.png

我們發(fā)現(xiàn)除了打印修改后的子節(jié)點信息之外,并沒有打印觸發(fā)事件的日志。

我們換種方式來添加watcher:

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

image.png

我們發(fā)現(xiàn)通過這種方式可以觸發(fā) NodeDataChanged 事件。

結論:

  • 添加 wacher 的命令有三個:ls、get 和 stat。
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容