通过给zookeeper节点添加监听事件,当事件触发时会通知应用程序,如通过get/stat -w监听当前节点信息变更,当更新节点或者删除节点时会触发事件;通过ls -w监听当前节点的子节点数量信息变更,当添加或者移除当前节点子节点时会触发事件。
事件的触发是一次性的,触发后需要再次注册才能继续监听事件。
一 get/stat监听节点变更
# 创建测试节点 [zk: localhost:2181(CONNECTED) 20] create /test 1 Created /test # 注册监听事件 [zk: localhost:2181(CONNECTED) 21] get -w /test # 在另外一个窗口更新/test节点 (即便值没有变化也会触发) [zk: localhost:2181(CONNECTED) 11] set /test 1 # 监听事件已经触发 [zk: localhost:2181(CONNECTED) 22] WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/test # 重新注册监听事件 [zk: localhost:2181(CONNECTED) 22] get -w /test 1 # 在另外一个窗口删除节点/test [zk: localhost:2181(CONNECTED) 23] # 监听事件已经触发 WATCHER:: WatchedEvent state:SyncConnected type:NodeDeleted path:/test
二 ls监听子节点数量变化
# 创建测试节点 注册监听事件 [zk: localhost:2181(CONNECTED) 24] create /test 1 Created /test [zk: localhost:2181(CONNECTED) 25] ls -w /test [] # 在另外一个窗口在/test下增加子节点 事件触发 [zk: localhost:2181(CONNECTED) 13] create /test/a 1 Created /test/a [zk: localhost:2181(CONNECTED) 26] WATCHER:: WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/test # 再次注册事件 [zk: localhost:2181(CONNECTED) 26] ls -w /test [a] # 更新子节点的值,不会触发事件(子节点数量没有变化) [zk: localhost:2181(CONNECTED) 14] set /test/a 1000 # 给子节点添加子节点,不会触发事件(只有当前节点的子节点数量变化才会触发) [zk: localhost:2181(CONNECTED) 17] create /test/a/b v1 Created /test/a/b # 删除子节点 事件触发 [zk: localhost:2181(CONNECTED) 19] deleteall /test/a [zk: localhost:2181(CONNECTED) 27] WATCHER:: WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/test



