【前言】
这篇文字不全是讲dubbo代码框架,而是博主怎么根据代码系统学习梳理的过程
dubbo源码地址:https://github.com/apache/incubator-dubbo
代码分析过程用的代码地图工具参考链接:
https://blog.csdn.net/weixin_39020940/article/details/80633835
【正文】
稍微看过dubbo的应该知道,这是一个分布式服务框架,提供高性能和透明化的RPC远程服务调用方案,采用SOA服务治理方案。
由于dubbo代码相对复杂,需要读者提前有一些dubbo基本框架知识,不然很难有头绪(作者也是)
1、它使用了spring
2、它是无代码侵入的rpc调用框架,需要配置服务xml
3、dubbo将服务xml解析并注册服务到服务管理侧
4、消费者调用服务者
更多的功能限于篇幅就不在这里讨论了,这里还是回归记录博主学习这块代码的过程
一、首先是dubbo将服务xml解析并注册服务到服务管理侧
用starTool导出dubbo代码地图,并过滤出dubbo-config下面的代码
config目录下大部分xxConfig都继承了AbstractConfig,先看一下AbstractConfig
static {
legacyProperties.put("dubbo.protocol.name", "dubbo.service.protocol");
legacyProperties.put("dubbo.protocol.host", "dubbo.service.server.host");
legacyProperties.put("dubbo.protocol.port", "dubbo.service.server.port");
legacyProperties.put("dubbo.protocol.threads", "dubbo.service.max.thread.pool.size");
legacyProperties.put("dubbo.consumer.timeout", "dubbo.service.invoke.timeout");
legacyProperties.put("dubbo.consumer.retries", "dubbo.service.max.retry.providers");
legacyProperties.put("dubbo.consumer.check", "dubbo.service.allow.no.provider");
legacyProperties.put("dubbo.service.url", "dubbo.service.address");
上面正式dubbo提供的配置参数,不过AbstractConfig是抽象类,不能实例化,找一个继承它的类看一下,既然知道dubbo是provider和consumer之间的框架,自然是先看ProviderConfig
// service IP addresses (used when there are multiple network cards available)
private String host;
// service port
private Integer port;
// context path
private String contextpath;
打开ProviderConfig看到基本就对上Provider定义使用的配置了,ProviderConfig里面基本都是set/get方法获取设置属性,看一下设置属性的调用点,就找到了ServiceConfig下面convertProtocolToProvider,而这个的调用点在ServiceBean.afterPropertiesSet
(未完待续)