首先附上我画的两张图
(架构)原理
总结:这篇文章,主要介绍的是dubbo服务的三个原理
a:解析服务:将配置好的文件(dubbo配置文件)解析成bean对象,依据bean对象生成URL
b:暴露服务:将解析出来的URL,根据协议头,注册到注册中心并暴露服务
c:服务调用:根据url的协议头,invoke实例,获得服务
一解析服务:
1.读取(如spring)配置文件,匹配名称空间为dubbo 的配置,这些配置将会注入到相应的config里面
dubbo 的配置2.使用handler(DubboNameSpaceHandler)类,调用DubboBeanDefinitionParse
DubboNameSpaceHandler这个时候就开始配置config了,我们重点看上图的ServiceBean
ServiceBean这个Bean是对ServiceConfig 的一个扩展,而ServiceConfig里面定义了接口类型,接口实现类引用,服务名称,方法配置 ,方法集合等 服务相关的配置.
ServiceConfig而他的父类,则定义了基础配置
接着说上面提到的利用DubboBeanDefinitionParse解析配置,转化为Bean对象
DubboBeanDefinitionParse3. 将bean对象转为为URL格式,bean对象的参数转化为URL的参数
ServiceConfigReferenceConfig里面有一个创建proxy的方法
ReferenceConfig这个方法里面会将bean封装成一个URL对象(如果有,则包含了用户指定的注册地址)
同下文的暴露端口 需要暴露IP和端口最后封装到的是这个接口,使用了SPI
代理工厂4.url会传输给Protocol,根据不同的协议头来进行不同的暴露和引用
二 暴露服务
1.从ServiceConfig拿到了服务的实际类getInvoker方法,判断暴露方式
ServiceConfig2.如果本地暴露,协议头为dubbo类型,适配到DubboProtocol的export()方法,暴露服务
DubboProtocol3.如果是像注册中心暴露服务,协议头为register类型,适配到RegisterProtocol的export()方法,修改url后,调用DubboProtocol的export()方法,注册到注册中心,然后暴露服务
RegisterProtocol 上图的解释3.初始化结束
三 调用服务
1.直接引用的(协议头dubbo,只暴露端口的),通过ReferenceConfig解析URL.通过适配器找到DubboProtocol的refer()方法,
DubboProtocol,(invoke)2.从注册中心发现引用服务(头为register),通过ReferenceConfig解析URL,通过适配器找到RegistryProtocol的refer()方法,获取refer的参数,查询提供者;这个时候协议头会变成dubbo,重复第1步流程.如果有多个提供者,则为伪装成一个服务.
网友评论