针对每个节点的操作,都会有一个监督者 watcher。
当监控的某个对象znode发生了变化,就会触发watcher事件
zk中的watch是一次性的,触发后立即销毁。
父节点,子节点增删改都能触发其watcher
针对不同类型的操作,触发的watcher事件也不同
1 节点创建事件
2 节点删除事件
3 节点数据变化事件
创建
创建父节点
[zk: localhost:2181(CONNECTED) 59] stat /test watchNode does not exist: /test[zk: localhost:2181(CONNECTED) 60] create /test testd-dataWATCHER::Created /testWatchedEvent state:SyncConnected type:NodeCreated path:/test
子节点创建
[zk: localhost:2181(CONNECTED) 78] ls /test watch[][zk: localhost:2181(CONNECTED) 79] create /test/sub testWATCHER::Created /test/subWatchedEvent state:SyncConnected type:NodeChildrenChanged path:/tes
修改
修改父节点
[zk: localhost:2181(CONNECTED) 64] get /test watchtestd-datacZxid = 0x1dctime = Wed May 08 19:06:40 CST 2019mZxid = 0x1dmtime = Wed May 08 19:06:40 CST 2019pZxid = 0x1dcversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 10numChildren = 0[zk: localhost:2181(CONNECTED) 65] set /test newdataWATCHER::WatchedEvent state:SyncConnected type:NodeDataChanged path:/testcZxid = 0x1dctime = Wed May 08 19:06:40 CST 2019mZxid = 0x1emtime = Wed May 08 19:12:27 CST 2019pZxid = 0x1dcversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 7numChildren = 0
修改子节点
依然触发的是NodeDataChanged事件
[zk: localhost:2181(CONNECTED) 83] get /test/sub watchtestcZxid = 0x26ctime = Wed May 08 19:30:32 CST 2019mZxid = 0x26mtime = Wed May 08 19:30:32 CST 2019pZxid = 0x26cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 4numChildren = 0[zk: localhost:2181(CONNECTED) 84] set /test/sub testdataWATCHER::WatchedEvent state:SyncConnected type:NodeDataChanged path:/test/subcZxid = 0x26ctime = Wed May 08 19:30:32 CST 2019mZxid = 0x27mtime = Wed May 08 19:30:54 CST 2019pZxid = 0x26cversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 8numChildren = 0
删除
删除父节点
[zk: localhost:2181(CONNECTED) 66] get /test watchnewdatacZxid = 0x1dctime = Wed May 08 19:06:40 CST 2019mZxid = 0x1emtime = Wed May 08 19:12:27 CST 2019pZxid = 0x1dcversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 7numChildren = 0[zk: localhost:2181(CONNECTED) 67] delete /testWATCHER::WatchedEvent state:SyncConnected type:NodeDeleted path:/test
删除子节点
[zk: localhost:2181(CONNECTED) 80] ls /test watch[sub][zk: localhost:2181(CONNECTED) 81] delete /test/sub[zk: localhost:2181(CONNECTED) 82]WATCHER::WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/test
