三.dubbo源码之服务导出

服务导出的方法入口是ServiceBean这个dubbo中的自定义类,ServiceBean由于实现了spring的ApplicationListener接口,重写了onApplicationEvent方法,所以当spring启动完成后,会调用onApplicationEvent方法,该方法中会执行export方法,执行启动netty(配置的dubbo协议就使用netty)或者tomcat(配置的http协议就使用tomcat),以及dubbo服务导出,包括读取ServiceBean中的属性(这些属性值由@Service注解中配置或者其他地方同步而来,另外dubbo的一个信息可以从四个地方进行配置,如@Service注解中,properties文件中,dubbo的管理台界面上,idea的Run/Debug configurations的VM options中,这几个地方的配置是有优先级的),将服务注册到注册中心,以及服务提供者监听管理台的动态配置等。ServiceBean#export方法具体会执行如下方法:

1) super.export()方法

此方法会进入到serviceConfig#export方法中执行如下方法;

1.1)checkAndUpdateSubConfigs方法

该方法主要是确定服务参数,配置参数从两个维度去看,一个是子应用遵循上级应用的配置,一个是同一个应用中的相同配置按照优先级顺序去获取;针对第一条,如果子应用没有配置某个参数,但是上一级应用配置了,则那么子应用就会继承这个上级应用的参数;接着再判断第二条,如果相同配置的参数有好几个地方配置了,则按照优先级取;在Dubbo中,除了可以在@Service注解中给服务配置参数,还有其他地方也可以给服务配置参数,比如:
a)dubbo.properties文件,dubob的源码中封装成了PropertiesConfiguration类;
b)管理台,dubbo在2.7版本后就支持了分布式管理台,可以在Dubbo-Admin中去操作配置;管理台分为全局配置和应用配置,在dubbo的源码中AppExternalConfiguration表示应用配置,ExternalConfiguration表示全局配置。
3. 系统环境变量,你可以在启动程序时,通过idea的-D的方式来指定参数,在dubbo的源码中封装成了SystemConfiguration类;
4. @Service注解所配置的参数,在dubbo的源码中封装成了AbstractConfig类;
服务的参数可以从这四个位置来,这四个位置上如果配了同一个参数的话,优先级从高到低如下:
SystemConfiguration -> AppExternalConfiguration -> ExternalConfiguration ->AbstractConfig -> PropertiesConfiguration,可见,-D方式配置的参数优先级最高,管理台次之,注解随后,dubbo.properties最后。
源码中这几个参数是linkedList组织的,源码中有个布尔类型参数,设置后可以使AbstractConfig排在第二,如下:
SystemConfiguration -> AbstractConfig ->AppExternalConfiguration -> ExternalConfiguration -> PropertiesConfiguration

1.2)doExport方法

1.2.1)doExportUrls方法

1.2.1.1)loadRegistries方法

拿到注册中心的地址及相关信息,拼接成一个url,例如:
在这里插入图片描述

1.2.1.2)doExportUrlsFor1Protocol方法

针对不同协议,如dubbo协议或者http协议,分别构造其url,然后再将url分别发往不同的注册中心地址;
在这里插入图片描述

例如,最终存到注册中心的url如下,注册中心存的是字符串;

在这里插入图片描述

2)publishExportEvent();

未完待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

orcharddd_real

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值