Dubbo服务导出流程图
2021-02-24 00:35:06 0 举报
Dubbo服务导出流程图
作者其他创作
大纲/内容
Spring的ApplicationListener会监听到该事件
通过SPI机制调用具体协议的export方法
ServiceBean.publishExportEvent
!currentUrl.equals(newUrl)
发布导出发成事件
XXProtocol.export()
RegistryProtocol.doChangeLocalExport()
从配置中心获取应用配置和全局配置信息
ServiceConfig.checkAndUpdateSubConfigs()
重新注册到注册中心
把@Service注解,即对象自己封装成AbstractConfig
调用具体实现类的方法
AbstractConfig.refresh()
否
ExchangeServer.reset(url)
根据registryUrl中的注册中心的名称,拿到对应的XXRegistry
ServiceConfig.doExportUrls()
通过代理工厂生成一个当前服务接口的代理对象(Invoker),调用invoker的invoke(Invocation invocation)方法即可执行服务,invocation就包含了服务(ref)的方法名、参数等信息,可以配置代理工厂(默认为javassit),把服务的Url信息放到注册中心Url的export属性上。
收到变更事件
根据动态配置更新providerUrl
对ServiceBean中setterXX方法采用反射的方式,将CompositeConfiguration中key为XX的值设置到ServiceBean的属性上。比如, SystemConfiguration:System.getProperty(key)、EnvironmentConfiguration:System.getenv(key)、PropertiesConfiguration:先从制定的配置文件(dubbo.properties.file)中拿,如果没有再从默认的配置文件(dubbo.properties)中拿
ServiceConfig.export()
RegistryProtocol.doLocalExport()
创建一个map,把所有的Config对象的getter方法对应的配置信息添加到这个map中,最终构造出服务的URL包括协议、参数信息(map中的键值对)
RegistryProtocol.export()
serviceConfigurationListener.overrideUrl(providerUrl)
XXConfigurationListener.notifyOverrides()
server == null
遍历每个协议,为每个协议构造一个服务,注册到各个注册中心
ServiceBean.export()
configCenterFirst==true
AbstractInterfaceConfig.startConfigCenter()
SystemConfiguration -> EnvironmentConfiguration->AbstractConfig -> InmemoryConfiguration(AppExternalConfiguration) -> InmemoryConfiguration(ExternalConfiguration) -> PropertiesConfiguration
复位
调用父类的方法
ServiceConfig.doExport()
向CompositeConfiguration中的configList(链表,有序)中添加Configuration
FailbackRegistry.register(URL url)
注册
检查和更新配置,获取最全最新配置
开启Server
AbstractInterfaceConfig.prepareEnvironment()
刷新ServiceConfig
OverrideListener.doOverrideIfNecessary()
刷新所有的XXConfig配置信息
重新导出
判断当前Url与新的Url是否不同
绑定服务监听器,同时根据服务的监听配置更新providerUrl
providerUrl = providerConfigurationListener.overrideUrl(providerUrl);
判断是否创建了Server服务
调用父类的导出方法
SystemConfiguration -> EnvironmentConfiguration-> InmemoryConfiguration(AppExternalConfiguration) -> InmemoryConfiguration(ExternalConfiguration) -> AbstractConfig -> PropertiesConfiguration
对服务的Url参数进行简化
补全配置,也即补当前对象全属性值
如果服务没有导出并且没有卸载,则导出
是
RegistryProtocol.getRegisteredProviderUrl()
重试
Spring启动完成后发布ContextRefreshedEvent事件
XXProtocol.createServer(),创建服务器
XXProtocol.openServer()
导出服务
RegistryProtocol.overrideUrlWithConfig()
ConfigManager.getInstance().refreshAll()
从配置中心获取并刷新当前XXConfig配置信息
ServiceConfig.completeCompoundConfigs()
根据应用的监听配置更新providerUrl
RegistryProtocol.reExport()
XXRegistry.doRegister(URL url)
0 条评论
下一页