Zookeeper 允许客户端向服务端的某个 znode 注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher ,服务端会向指定客户端发送一个事件通知来实现分布式的通知功能,然后客户端根据 Watcher 通知状态和事件类型做出业务上的改变。
大致分为三个步骤:
1:客户端注册 Watcher
- 调用 getData、getChildren、exist 三个 API ,传入Watcher 对象。
- 标记请求request ,封装 Watcher 到 WatchRegistration 。
- 封装成 Packet 对象,发服务端发送request 。
- 收到服务端响应后,将 Watcher 注册到 ZKWatcherManager 中进行管理。
- 请求返回,完成注册。
2:服务端处理 Watcher
- 服务端接收 Watcher 并存储。
- Watcher 触发
- 调用 process 方法来触发 Watcher 。
3:客户端回调 Watcher
- 客户端 SendThread 线程接收事件通知,交由 EventThread 线程回调Watcher 。
- 客户端的 Watcher 机制同样是一次性的,一旦被触发后,该 Watcher 就失效了。