开发者社区> 问答> 正文

Zookeeper中服务端处理Watcher怎么实现的?

Zookeeper中服务端处理Watcher怎么实现的?

展开
收起
芯在这 2021-12-11 20:57:31 270 0
1 条回答
写回答
取消 提交回答
  • 服务端接收Watcher并存储

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

    Watcher触发

    以服务端接收到 setData() 事务请求触发NodeDataChanged事件为例:

    封装WatchedEvent

    将通知状态(SyncConnected)、事件类型(NodeDataChanged)以及节点路径封装成一个WatchedEvent对象

    查询Watcher

    从WatchTable中根据节点路径查找Watcher

    没找到;说明没有客户端在该数据节点上注册过Watcher

    找到;提取并从WatchTable和Watch2Paths中删除对应Watcher(从这里可以看出Watcher在服务端是一次性的,触发一次就失效了)

    调用process方法来触发Watcher

    这里process主要就是通过ServerCnxn对应的TCP连接发送Watcher事件通知。

    2021-12-11 20:58:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
《MSE 微服务网关》 立即下载
微服务引擎 MSE 治理中心重磅发布 立即下载
阿里云微服务引擎 MSE 2.0 线上发布 立即下载