大家好,欢迎来到IT知识分享网。
Registry
RegistryFactory
工厂类,负责生成Registry实例,维护Registry实例缓存,根据底层实现技术的不同,分为dubbo,zookeeper,redis,multicast实现。
RegistryProtocol:注册协议
- export方法:负责将provider的service注册到注册中心,具体调用了在ServiceConfig中通过ExtensionLoader加载RegistryProtocol。
- 注册中心实现选择:包括:zookeeper,redis,dubbo。确定RegistoryFactory的实现:一旦RegistoryFactory实现确定,则Registry就确定了。
- 根据ExtensionLoader的分析,通过ServiceConfig确定采用的是RegistryProtocol,通过RegistryProtocol的export方法注册service到注册中心。
- RegistryProtocol通过ExtensionLoader确定RegistryFactory的实现类。
- 具体过程
(1)在RegistryProtocol的export方法调用了getReigstry(originInvoker):
如下:右下角为originInvoker的url的protocol和相关parameters,registry -> zookeeper,所以通过setProtocol设置值为zookeeper,故最终选择的是ZookeeperRegistoryFactory,具体看(2)中RegistryFactory的SPI和@Adaptive规则。
getRegistry的实现:模板设计模式,最终由具体实现类实现createRegistry。
ZookeeperRegistry的定义:
package com.alibaba.dubbo.registry; import com.alibaba.dubbo.common.extension.ExtensionLoader; public class RegistryFactory$Adpative implements com.alibaba.dubbo.registry.RegistryFactory { public com.alibaba.dubbo.registry.Registry getRegistry(com.alibaba.dubbo.common.URL arg0) { if (arg0 == null) throw new IllegalArgumentException("url == null"); com.alibaba.dubbo.common.URL url = arg0; String extName = ( url.getProtocol() == null ? "dubbo" : url.getProtocol() ); if(extName == null) throw new IllegalStateException("Fail to get extension(com.alibaba.dubbo.registry.RegistryFactory) name from url(" + url.toString() + ") use keys([protocol])"); com.alibaba.dubbo.registry.RegistryFactory extension = (com.alibaba.dubbo.registry.RegistryFactory)ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.registry.RegistryFactory.class).getExtension(extName); return extension.getRegistry(arg0); } }
RegistryDirectory:消费者订阅监听器
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/124547.html