zk的watcher机制

本文详细介绍了ZooKeeper的Watcher机制,包括客户端注册Watcher、服务端处理Watcher以及客户端回调Watcher的过程。Watcher是一个事件处理器,当服务端触发事件时,会通过网络将事件发送给客户端,客户端再从WatchManager中取出并执行回调逻辑。Watcher具有一次性、客户端串行执行和轻量级等特性。
摘要由CSDN通过智能技术生成

zk的注册总体图

这里写图片描述
客户端在向zk服务器注册Watcher的同时,会将Watcher对象存储在客户端的WatchManager中。
当zk服务端触发Watcher事件后,会向客户端发送通知,客户端线程从WatcherManager中取出对应的Watcher对象。来执行回调逻辑。

Watcher接口

Watcher是一个标准的事件处理器,其定义了事件通知相关的逻辑,包含KeeperState和EventState,分别代表通知状态和事件类型,在回调process中进行处理。

 public abstract void process(WatchedEvent event); 

WatchedEvent类

  public class WatchedEvent
  {
    //是一个枚举类,代表通知状态,是链接的,还是断开的。
    keeperState;
    //是一个枚举类,代表事件类型,当处于连接时,事件是子节点变化等事件
    eventType
    //节点路径
    path
  }

WatcherEvent类

 WatcherEvent
 {
   //代表事件类型
   type:int;
   //代表节点状态
   state:int;
   path:String
 }

总结:WatchedEvent和WatcherEvent表示的是同一个事物。WatchedEvent是一个逻辑事件,用于服务端和客户端程序执行过程中所需的逻辑对象。而WatcherEvent因为实现了序列化接口,因此,可以用于网络传输。
服务端在生成WatchedEvent事件之后,会调用getWrapper方法将自己包装成一个WatcherEvent,以便通过网络传输到客户端,客户端在接收到服务端的这个事件对象后,首先会将WatcherEvent事件还原成一个WatchedEvent事件,并传递给process方法进行处理。
从事件可以看到,客户端无法直接从该事件中获取到对应数据节点的原始数据内容以及变更后的新数据内容。

客户端注册Watcher

  1. 在创建一个zk对象实例时,可以在构造函数中传入一个默认的Watcher。默认的Watcher作为整个zk会话期间的默认Watcher,会一直保存在客户端的ZkWatchManager的defaultWatcher中。
  2. ZkWatchManager数据结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值