通知机制
-
通知类似于数据库中的触发器, 对某个Znode设置
Watcher
, 当Znode发生变化的时候,WatchManager
会调用对应的Watcher
-
当Znode发生删除, 修改, 创建, 子节点修改的时候, 对应的
Watcher
会得到通知 -
Watcher
的特点-
一次性触发 一个
Watcher
只会被触发一次, 如果需要继续监听, 则需要再次添加Watcher
-
事件封装:
Watcher
得到的事件是被封装过的, 包括三个内容keeperState, eventType, path
-
KeeperState | EventType | 触发条件 | 说明 |
---|---|---|---|
None | 连接成功 | ||
SyncConnected | NodeCreated | Znode被创建 | 此时处于连接状态 |
SyncConnected | NodeDeleted | Znode被删除 | 此时处于连接状态 |
SyncConnected | NodeDataChanged | Znode数据被改变 | 此时处于连接状态 |
SyncConnected | NodeChildChanged | Znode的子Znode数据被改变 | 此时处于连接状态 |
Disconnected | None | 客户端和服务端断开连接 | 此时客户端和服务器处于断开连接状态 |
Expired | None | 会话超时 | 会收到一个SessionExpiredException |
AuthFailed | None | 权限验证失败 | 会收到一个AuthFailedException |
会话
-
在ZK中所有的客户端和服务器的交互都是在某一个
Session
中的, 客户端和服务器创建一个连接的时候同时也会创建一个Session
-
Session
会在不同的状态之间进行切换:CONNECTING
,CONNECTED
,RECONNECTING
,RECONNECTED
,CLOSED
-
ZK中的会话两端也需要进行心跳检测, 服务端会检测如果超过超时时间没收到客户端的心跳, 则会关闭连接, 释放资源, 关闭会话