zookeeper事件监听机制

简介

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值