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

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

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

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