2019年面试官最喜欢问的28道ZooKeeper面试题(11)

7. 客户端注册 Watcher 实现

(1)调用 getData()/getChildren()/exist()三个 API , 传入 Watcher 对象

(2)标记请求 request , 封装 Watcher 到 WatchRegistration

(3)封装成 Packet 对象 , 发服务端发送 request

(4)收到服务端响应后 , 将 Watcher 注册到 ZKWatcherManager 中进行管理

(5)请求返回 , 完成注册 。

8. 服务端处理 Watcher 实现

(1)服务端接收 Watcher 并存储

接收到客户端请求 , 处理请求判断是否需要注册 Watcher , 需要的话将数据节点的节点路径和 ServerCnxn(ServerCnxn 代表一个客户端和服务端的连接 , 实现了 Watcher 的 process 接口 , 此时可以看成一个 Watcher 对象)存储在WatcherManager 的 WatchTable 和 watch2Paths 中去 。

推荐阅读