在<一>中用了spring-boot-starter-dubbo,Zookeeper作为注册中心简要的写了一个服务,看了一下在zk中的节点信息,其实还clone了dubbo的源码看看那,其中有一个模块是dubbo-registry-zookeeper,还不是很清楚dubbo项目的整体架构,就先拆出它来看看怎么做的。
满怀希望地打开,其实发现里面就两个类,结果发现细节好多,智商捉急!
其中一个还是叫Factory的类,看名字应该和工厂方法一样的吧。看到里面有一个属性是com.alibaba.dubbo.remoting.zookeeper.ZookeeperTransporter,另一个就是创建zk注册类createRegistry(URL url),这个大概才是主角吧。
ZookeeperRegistry继承了FailbackRegistry,FailbackRegistry继承AbstractRegistry。
ZookeeperRegistry主要实现了里面的四个抽象方法,当然FailbackRegistry里面还有很多方法(包括他继承的抽象方法)。
点进去看看这个ZookeeperRegistry的构造方法吧,这边也是主要先连接注册中心,获取会话,还加了状态监听。
上面的super(url)会执行检测并且连接注册中心,这边用了一个定时任务执行器
做这个事情,还有retry方法 是写在实现的那个抽象类里面的,对多种情况作了处理,写的很长,今天是无法消化这个啦,暴露智商系列。
在AbstractRegistry中对url的操作不太明白,注释是 “启动文件保存定时器”。
ZookeeperRegistry中的属性虽然不多,可是你知道它继承了很多东西,这边默认端口是2181,root目录是 dubbo,zk监听和客户端,看不太明白anyservice的作用(如果看懂,后续补上)
ZookeeperRegistry这边可以看到doRegister与doUnregister,这个写的比较简介,这边还有对url处理的好个方法,dubbo这边使用的是zkclient,如果你看到我之前写的zookeeper之java api,你会发现那个同步异步方法用起来还是挺麻烦的,比如创建还是异步的,zkclinet是对zookeeper原生api的封装,可以省去繁琐的细节,后续写zk学习笔记再来会会它吧,并看看怎么封装的。
还有两个方法是订阅请求和不订阅,可以看到这两个方法里面的参数是final的,点击查看谁调用了他们,结果发现是在抽象类FailbackRegistry方法中有个
subscribe(URL url, NotifyListener listener)方法调用了,可以想到在用redis注册的实现中也用了类似的套路。
ZookeeperRegistry中:
FailbackRegistry中:
这边的URL是com.alibaba.dubbo.common包中,用到太多了,看看里面是什么妖魔鬼怪,后续还要和它斗智斗勇吧。
能力有限,一时也看不出太多的门道,后续多看一点,是否可以多看出一点东西,就再补上吧。
一般看不太懂的时候,我还会看一下他们写的测试代码 test,可是我点开
ZookeeperRegistryTest,发现里面基本都被坐着注释掉了,这是???for
公众号