深圳网站品牌建设/培训seo哪家学校好
Zookeeper 允许客户端向服务端的某个 Znode 注册一个 Watcher 监听,当服 务端的一些指定事件触发了这个 Watcher,服务端会向指定客户端发送一个事 件通知来实现分布 式的通知功能,然后客户端根据 Watcher 通知状态和事件类 型做出业务上的改变。
工作机制:
(1)客户端注册 watcher
(2)服务端处理 watcher
(3)客户端回调 watcher
客户端注册 Watcher 实现
(1)调用 getData()/getChildren()/exist()三个 API,传入 Watcher 对象
(2)标记请求 request,封装 Watcher 到 WatchRegistration
(3)封装成 Packet 对象,发服务端发送 request
(4)收到服务端响应后,将 Watcher 注册到 ZKWatcherManager 中进行管 理
(5)请求返回,完成注册。
服务端处理 Watcher 实现
(1)服务端接收 Watcher 并存储
接收到客户端请求,处理请求判断是否需要注册 Watcher,需要的话将数据节 点的节点路径和 ServerCnxn(ServerCnxn 代表一个客户端和服务端的连接, 实现了 Watcher 的 process 接口,此时可以看成一个 Watcher 对象)存储在 WatcherManager 的 WatchTable 和 watch2Paths 中去。
(2)Watcher 触发
以服务端接收到 setData() 事务请求触发 NodeDataChanged 事件为例:
2.1 封装 WatchedEvent 将通知状态(SyncConnected)、事件类型(NodeDataChanged)以及节点 路径封装成一个 WatchedEvent 对象
2.2 查询 Watcher 从 WatchTable 中根据节点路径查找 Watcher
2.3 没找到;说明没有客户端在该数据节点上注册过 Watcher
2.4 找到;提取并从 WatchTable 和 Watch2Paths
中删除对应 Watcher(从 这里可以看出 Watcher 在服务端是一次性的,触发一次就失效了)
(3)调用 process 方法来触发 Watcher 这里 process 主要就是通过 ServerCnxn 对应的 TCP 连接发送 Watcher 事件 通知。