简介
zk事件监听命令,加-w:
- ls -w [path]:监听子节点的增删
- get -w [path] 数据变化
- stat -w [path] 节点属性变化
zk事件类型:
- None 连接建立事件
- NodeCreated,NodeDeleted 节点创建,节点删除
- NodeDataChanged 节点数据变化
- NodeChildrenChanged 子节点列表变化
- DataWatchRemoved 节点监听移除
- ChildrenWatchRemoved 子节点监听移除
ls -w
创建节点,并ls -w监听该节点子节点的变化
[zk: localhost:2181(CONNECTED) 0] create /node-watch mydata
Created /node-watch
[zk: localhost:2181(CONNECTED) 1] ls -w /node-watch
[]
开启另一个会话,创建子节点
[zk: localhost:2181(CONNECTED) 0] create /node-watch/sub
Created /node-watch/sub
原来的会话监听到了NodeChildrenChanged事件
[zk: localhost:2181(CONNECTED) 2]
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/node-watch
第二个会话在创一个子节点,第一个会话监听不到了,说明事件触发后监听会被移除
[zk: localhost:2181(CONNECTED) 1] create /node-watch/sub/sub1
Created /node-watch/sub/sub1
ls -R -w
ls -R -w [path]可以递归监听,也就是一次监听当前目录和所有子目录,如下,监听了3个目录
[zk: localhost:2181(CONNECTED) 0] ls -R -w /node-watch
/node-watch
/node-watch/sub
/node-watch/sub/sub1
其他会话再这3个目录创建子节点,会触发事件,但同一目录也只触发一次
[zk: localhost:2181(CONNECTED) 1]
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/node-watch/sub
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/node-watch
get -w [path]
监听节点数据变化
[zk: localhost:2181(CONNECTED) 2] get -w /node-watch
mydata
其他会话修改数据
[zk: localhost:2181(CONNECTED) 6] set /node-watch otherdata
监听到NodeDataChanged事件
[zk: localhost:2181(CONNECTED) 3]
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/node-watch
stat -w [path]
监听节点属性变化
[zk: localhost:2181(CONNECTED) 4] stat -w /node-watch
cZxid = 0x42
ctime = Thu Mar 18 16:53:36 CST 2021
mZxid = 0x4b
mtime = Thu Mar 18 17:09:17 CST 2021
pZxid = 0x4a
cversion = 2
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 2
其他会话修改数据,当前会话监听到NodeDataChanged事件
[zk: localhost:2181(CONNECTED) 5]
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/node-watch
重新监听:
[zk: localhost:2181(CONNECTED) 8] stat -w /node-watch
cZxid = 0x42
ctime = Thu Mar 18 16:53:36 CST 2021
mZxid = 0x4c
mtime = Thu Mar 18 17:11:31 CST 2021
pZxid = 0x4d
cversion = 3
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 3
其他会话创建子节点,当前会话没有监听到事件:
[zk: localhost:2181(CONNECTED) 8] create /node-watch/sub10
Created /node-watch/sub10
修改ACL,也没有监听到:
[zk: localhost:2181(CONNECTED) 11] setAcl /node-watch digest:user9:saefafn:cwrda