本篇Dubbo版本是2.7.3.Release. 这次是接着上次服务Export过程,其中服务提供者是怎么注册的呢? 首先ServiceBean中调用Protocol调用export过程,Protocol是调用SPI加载的机制,进行服务导出的.
由于Dubbo的SPI机制,ProtocolListenerWrapper是Protocol扩展的包转类(即是构造函数传入的是Protocol类型参数),ProtocolListenerWrapper是默认激活的,这个知识点是在前面介绍Dubbo的SPI机制详细介绍过. 这里dubbo-rpic-apijar包里META/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为例, 分析了注册的过程.