转载

Dubbo源码分析(四)----Zookeeper注册中心

本篇Dubbo版本是2.7.3.Release. 这次是接着上次服务Export过程,其中服务提供者是怎么注册的呢? 首先ServiceBean中调用Protocol调用export过程,Protocol是调用SPI加载的机制,进行服务导出的.

Dubbo源码分析(四)----Zookeeper注册中心
由于Dubbo的SPI机制,ProtocolListenerWrapper是Protocol扩展的包转类(即是构造函数传入的是Protocol类型参数),ProtocolListenerWrapper是默认激活的,这个知识点是在前面介绍Dubbo的SPI机制详细介绍过.
Dubbo源码分析(四)----Zookeeper注册中心
这里dubbo-rpic-apijar包里META/internal下配置ProtocolFilterWrapper和ProtocolListenerWrapper是Protocol下是Protocol的包装类,这个两个会默认执行.
Dubbo源码分析(四)----Zookeeper注册中心
从图可以看到ProtocolFilterWrapper注入的是RegistryProtocol这个对象,这个是实现服务注册的核心逻辑. 这是RegistryProtocol的export方法的逻辑, 主要是调用register方法进行服务注册
Dubbo源码分析(四)----Zookeeper注册中心
这里registryFactory是SPI的扩展点,这里以zookeeper注册中心为例,实际创建的对象是ZookeeperRegistryFactory对象.然后获取registry对象是ZookeeperRegistry.接着调用register方法进行注册.
Dubbo源码分析(四)----Zookeeper注册中心
这个register方法是的ZookeeperRegistry父类FailbackRegistry的方法,
Dubbo源码分析(四)----Zookeeper注册中心
doRegister才是ZookeeperRegistry子类实现的父类的模板方法,通过zkClient去创建动态的配置, 注册的服务信息(包含服务的IP和端口以及接口类)都是在Zookeeper创建临时节点, 当服务与zkClient与zookeeper保持的心 跳后,这个注册的元信息也会从zookeeper上消失,也就是服务下线.
Dubbo源码分析(四)----Zookeeper注册中心
zkClient是默认扩展点CuratorZookeeperTransporter调用connect返回的实际对象是CuratorZookeeperClient,通过Curator这个Client向zookeeper进行操纵的.

总结

今天分析服务导出的过程,向服务注册中心注册的过程分析,本篇以zookeeper为例, 分析了注册的过程.

原文  https://juejin.im/post/5d37c6dcf265da1bc07e7c1e
正文到此结束
Loading...