Dubbo源码阅读五:DubboBootstrap启动之initialize()

本文详细解析了DubboBootstrap初始化过程,包括如何加载配置中心、元数据服务和事件监听器。同时,介绍了initFrameworkExts()方法如何加载FrameworkExt实现类并执行初始化。此外,还深入探讨了startConfigCenter()方法,阐述了如何建立configCenter客户端与服务端的连接,以及配置信息的加载和更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第1节 initialize()的调用过程

DubboBootstrap.initialize()方法用于初始化Dubbo容器,详细的调用过程如下图所示。

 

1)初始化Environment,ConfigManager,ServiceRepository全局framework对象。

2)启动configCenter配置中心,构建configuration客户端对象,成功连接到config server。

3)加载远程配置。

4)校验全局配置。

5)启动元数据配置中心。

6)初始化元数据服务实例。

7)初始化事件监听器。

第2节 initFrameworkExts()的调用过程

initFrameworkExts()方法用于加载FrameworkExt接口的实现类,创建所有的实现类对象,并执行initialize()初始化操作,详细的调用过程如下图所示。

1)加载FrameworkExt SPI接口的实现类。

2)创建FrameworkExt接口的所有实现类的实例,会创建Environment,ConfigManager,ServiceRepository这些全局framework对象。

3)对所有framework对象执行initialize()初始化。执行environment.initialize()方法时,会执行configManager.getDefaultConfigCenter()加载默认的config-center配置,即xml中<dubbo:config-center>标签对应的配置。

当xml中没有配置<dubbo:config-center>,后续会将<dubbo:registry>配置转换成config-center配置。

第3节 startConfigCenter()的调用过程

startConfigCenter()方法用于启动动态configCenter配置中心,会创建configCenter客户端,并与配置中心服务端建立好连接。

Dubbo支持很多种配置中心:zookeeper,apollo,nacos,consul,etcd等。

startConfigCenter()方法的详细调用过程如下图所示:

 

(第一步)如果没有配置<dubbo:config-center>,将registry配置转换成configCenter配置,并加入configManager中。

启动spring的dubbo-providerxml配置如下:

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    <dubbo:application name="dubbo2-provider"/>
    <dubbo:registry address="zookeeper://172.16.4.126:2181"/>
    <dubbo:metadata-report address="zookeeper://172.16.4.126:2181"/>
    <dubbo:protocol name="dubbo" port="20880"/>
    <dubbo:service interface="org.example.dubbo2.provider.api.GreetingsService" ref="greetingsService"/>
    <bean id="greetingsService" class="org.example.dubbe2.provider.impl.GreetingsServiceImpl"/>
</beans>

DubboBootstrap.initialize()方法执行完后,没有配置<dubbo:cofig-center>,configManager的状态如下。

 

DubboBootstrap.useRegistyAsConfigCenterIfNecessary()方法执行完之后,将registry配置转换成config-center配置加入configManager,如下图所示。

 

(第二步)构建CompositeDynamicConfiguration对象。

(第三步)通过config-center配置构建DynamicConfiguration对象,调用prepareEnvironment()方法完成,其中会创建configCenter的客户端对象,并成功连接上configCenter服务端,如果连接失败会抛出异常,进程退出。然后从configCenter服务端读取/dubbo/config/dubbo/dubbo.properties的内容并更新到enviroment中,接着从configCenter服务端读取/dubbo/config/{dubbo:application.name}/dubbo.properties的内容并更新到environment中, 最后将DynamicConfiguration对象加入CompositeDynamicConfiguration对象。

(第四步)将CompositeDynamicConfiguration对象加入environment对象中。

(第五步)刷新configManager的配置信息。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值