从观察者设计模式的角度理解Zookeeper中的Watcher
阅读原文时间:2023年07月10日阅读:1

  前面关于Zookeeper提供的API中,可以观察到大部分接口参数似乎都是用了Wathcerz这个接口。这个在观察者模式中略有涉及,本文重点分析从观察者模式的角度分析该接口。

  首先上该接口的UML图:

    

  通过上图可知,该接口中的内部类分别定义了watcher的类型,keeper的链接状态以及监听的事件类型。对外提供的唯一的方法中参数WatcherEvent(该类所有信息由Zookeeper服务器端返回)的UML图如下:

    

  下面看看zookeeper自身对于Watcher的实现:

    

  具体分析服务端启动使用的ControllableConnection,其继承关系UML图如下:

    

  跟踪源码,Watcher具体实现在NIOServerCnxn:process,其功能为监听所有事件并包装完成之后

  具体使用在Zookeeper的启动,UML图如下:服务端watcher的功能就是监听服务端节点或者节点数据的变化发出通知事件。

    

  对客户端的watcher就是接收事件并根据关注点(增减节点/节点数据更新/与服务器链接状态等)回调处理。

  以Zookeeper应用之一~数据发布与订阅初体验为例分析:其应用服务端与客户端对于Zookeeper服务而言都是客户端。应用服务端新建节点前需要监听其与zookeeper链接释放同步状态事件;应用客户端获取子节点时需监听节点列表是否有变化事件。

  具体实现如下: