从设计模式的角度理解Zookeeper中的Watcher
Posted 池塘里洗澡的鸭子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从设计模式的角度理解Zookeeper中的Watcher相关的知识,希望对你有一定的参考价值。
前面关于Zookeeper提供的API中,可以观察到大部分接口参数似乎都是用了Wathcerz这个接口。这个在观察者模式中略有涉及,本文重点分析从观察者模式的角度分析该接口。
首先上该接口的UML图:
通过上图可知,该接口中的内部类分别定义了watcher的类型,keeper的链接状态以及监听的事件类型。对外提供的唯一的方法中参数WatcherEvent(该类所有信息由Zookeeper服务器端返回)的UML图如下:
下面看看zookeeper自身对于Watcher的实现:
具体分析服务端启动使用的ControllableConnection,其继承关系UML图如下:
跟踪源码,Watcher具体实现在NioserverCnxn:process,其功能为监听所有事件并包装完成之后
具体使用在Zookeeper的启动,UML图如下:服务端watcher的功能就是监听服务端节点或者节点数据的变化发出通知事件。
对客户端的watcher就是接收事件并根据关注点(增减节点/节点数据更新/与服务器链接状态等)回调处理。
以Zookeeper应用之一~数据发布与订阅初体验为例分析:其应用服务端与客户端对于Zookeeper服务而言都是客户端。应用服务端新建节点前需要监听其与zookeeper链接释放同步状态事件;应用客户端获取子节点时需监听节点列表是否有变化事件。
具体实现如下:
以上是关于从设计模式的角度理解Zookeeper中的Watcher的主要内容,如果未能解决你的问题,请参考以下文章