ZooKeeper学习之关于Servers和Watches

watch是由read operation设置的一次性触发器,由一个特定operation来触发。为了在server端管理watch,ZK的server端实现了watch manager。一个WatchManager类的实例负责管理当前已被注册的watch列表,并负责触发它们。所有类型的server(包括standalone,leader,follower和observer)使用同样的方式处理watch。

 

DataTree类持有一个watch manager来维护所有类型的watch和一些附加的数据,当处理一个带有watch的read operation时,此类就会把这个watch加入manager的watch列表。类似的,当处理一个事务时,此类会查明是否需要触发相应的watch。如果发现有watch需要触发,此类就会调用manager的触发方法。添加一个watch和触发一个watch都会以一个read请求或者FinalRequestProcessor类的一个事务开始。

在server端触发了一个watch,会传播到client。此类使用server cnxn对象来处理(参见ServerCnxn类),此对象管理client和server的连接并实现了Watcher接口。Watch.process方法序列化了watch event,并通过网络发送出去。client接收到了序列化数据,转换成watch event对象,并传递到应用程序。watch只会保存在内存,不会持久化到硬盘。当client断开与server的连接时,它的所有watch会从内存中清除。因为client的库也会维护一份watch的数据,在重连之后watch数据会再次被同步到server端

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值