dubbo源码-RegistryProtocol(注册中心和服务提供者的桥梁)


RegistryProtocol是Protocol的实现类,是注册中心和服务提供者的桥梁,下面分析该类主要的两个方法export(导出服务)、refer(引用服务)的实现流程,分析是如何实现服务导出和服务引用的。

export:

export比较简单,先从invoker中抽取出服务提供者url,调用底层protocol(通过SPI 注入的具体protocol,比如dubbo protocol)的export执行导出,然后从invoker抽取出注册中心url,在调用注册中心的factory获取注册中心,最后进行服务的注册。

 

refer:

refer因为涉及到服务提供者是集群提供,所以逻辑比export复杂一些,要依赖directory(前面博客有分析)的功能。

首先通过invoker的url获取注册中心的url配置信息,然后给获取的注册中心构建ServiceDiscoveryMigrationInvoker invoker。分析下这类Invoker:

 

 

这类Invoker都是以Migration(迁移)开头的,不知道为啥是这个名字,有什么历史故事。MigrationClusterInvoker继承自Invoker主要定义了ServiceDiscoveryInvoker和InterfaceDiscoveryInvoker的刷新操作。

MigrationInvoker实现了MigrationClusterInvoker接口,底层依赖RegistyProtocol的getServiceDiscoveryInvoker和getInvoker接口获取invoker并刷新自己维护的invoker,而RegistryProtocol这两个方法获取到的Invoker都是ClusterInvoker,唯一的差别的是传入的directory一个是ServiceDiscoveryDirectory,一个是RegistryDirectory,在创建Directory后会在这里调用directory的订阅方法,底层具体实现订阅的注册中心类里,比如zookeeperregistry里在订阅完成以后会在调用DynamicDirectory的notify方法更新他们内部的invoker,这也是主要的注册中心和服务提供者关联的地方。 MigrationInvoker封装了serviceDiscoveryinvoker和interfaceinvoker的选择逻辑,底层还是依赖从RegistryProtocol中拿到的invoker的invoke方法。

再回到上面RegistryProtocol的refer流程里,获取到MigrationInvoker这个实例后,又调用了定义的registryProtocolListener的onRefer方法,在唯一的实现MigrationRuleListener类中调用了MigrationInvoker的刷新invoker方法初始化MigrationInvoker类中的两个invoker。

最后返回 MigrationInvoker作为最终的invoker。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM