Watch机制原理解析

本文深入解析ZooKeeper的Watch机制,从注册、存储、通知三个方面阐述。以getData为例,详细介绍了客户端如何发起注册请求,服务端如何存储Watcher,以及如何在数据变更时触发通知。文中还提到了客户端和服务端的存储结构,以及事件处理流程。
摘要由CSDN通过智能技术生成

来源:
《从Paxos到Zookeeper》
https://www.cnblogs.com/GrimMjx/p/10922480.html
https://blog.csdn.net/huyangyamin/article/details/77743624
https://www.bilibili.com/video/av32715941?from=search&seid=9380652373328528650

以getData为例:

从注册、存储、通知的角度来看:

  • ​ 发起注册请求

首先封装了一个WatchRegistration对象,暂时保存数据节点的路径和Watcher对象的关系,用来等服务端完成注册,发送响应给客户端的时候,提取出Watcher交给WatcherManager真正地保存

概念:packet可以看成一个最小的通信协议单元,用于进行客户端与服务端之间的网络传输

WatchRegistration被封装在了packet对象里发送给服务端,接着将packet对象放到了发送队列outgoingQueue里(packet只序列化了requestHeader和request两个属性,没有序列化WatchRegistration,也就是说,服务端不会接收到节点路径和watcher对象的关系,回调的业务逻辑代码也不会给服务端

//此方法由Packet p调用:p.createBB()
public void createBB() {
   
    try {
   
        ...
        //序列化requestHeader
        if (this.requestHeader != null) {
   
            this.requestHeader.serialize(boa, "header");
        }
      	...
        //序列化request
        } else if (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值