zookeeper-认识watcher

134 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

zookeeper监听机制

认识watcher

类似于消息队列,zookeeper也提供了数据的发布/订阅的功能,多个订阅者可同时监听某一特定对象,当该主题对象的自身状态发生变化时,例如节点内容发生改变、节点下的子节点列表发生改变,会及时主动通知所有订阅者。

这种机制叫做Watcher机制,实现了数据的发布订阅功能。和传统的监听方式不同,客户端不必在Watcher注册后轮询阻塞,也减轻了客户端压力。与观察者模式也有点类似。

watcher架构模式

Watcher的实现主要是由三个部分组成的:

  1. Zookeeper服务端
  2. Zookeeper客户端
  3. 客户端的ZKWatchManager对象

客户端最开始会将Watcher注册到服务端,同时将Watcher对象保存到Watch管理器中。当ZooKeeper服务端监听的对象或者数据状态/内容发生变化时,服务端会通知客户端,客户端的Watch管理器接收到消息,立马触发相关Watcher来回调相应处理逻辑。

watcher的特性

  1. 一次性的:watcher是一次性的,一旦被触发就会移除,再次使用时需要重新注册
  2. 按顺序回调:watcher回调是顺序串行化执行的,只有回调后客户端才能看到最新的数 据状态。一个watcher回调逻辑不应该太多,以免影响别的watcher执行
  3. 时效性:WatchEvent是最小的通信单元,结构上只包含通知状态、事件类型和节点 路径,并不会告诉数据节点变化前后的具体内容
  4. 轻量:watcher只有在当前session彻底失效时才会无效,若在session有效期内 快速重连成功,则watcher依然存在,仍可接收到通知