Dubbo——服务端启动过程分析

本文深入分析了Dubbo服务端的启动过程,包括服务注册触发、生成注册地址的详细步骤。服务注册涉及ServiceBean类的初始化,对注解和XML方式的处理,以及延迟注册的控制。在生成注册地址时,首先检查配置,然后根据参数构建RegistryConfig对象,处理多个注册地址。服务暴露由ServiceConfig.export()方法执行,涉及协议、URL构建、本地和远程暴露的判断,以及Invoker代理和Protocol的暴露逻辑。整个过程涵盖了服务的各个层面,确保服务正确、高效地启动和注册。
摘要由CSDN通过智能技术生成

服务端启动过程分析

1  触发服务注册过程

服务端的启动过程中,对服务暴露由ServiceBean类开始处理逻辑,该类继承了<dubbo:service>标签对应的配置类ServiceConfig,还实现了一系列Spring接口用于参与Spring容器的启动以及bean的创建过程中去。ServiceBean类实现了InitializingBean接口的afterPropertiesSet方法。

对于注解方式注册服务,首先在在Spring回调AnnotationBean类的postProcessAfterInitialization方法时,触发调用ServiceBean. afterPropertiesSet ()方法,若服务设置为非延迟注册,则直接调用在ServiceConfig.export()方法触发服务注册过程。

对于XML方式注册服务,在spring的容器ApplicationConetext的启动过程refesh过程中最后第二步会预先初始化单例bean,在bean的初始化过程中会设置beanName,设置容器的appliactionContext并回调afterPropertiesSet方法,若此服务为延迟注册,则跳过此过程;在最后一步finishRefresh会触发ContextRefreshedEvent实际,而ServiceBean实现了ApplicationListener接口的onApplicationEvent方法监听此事件,从而在此方法被触发时调用export方法注册服务。

上述设置服务注册延迟的方法是配置<dubbo:service>标签的delay属性。


2 生成注册地址

AbstractInterfaceConfig.loadRegistries(boolean provider)方法中生成注册地址。

       1、检查xml中是否配置注册信息,若没有则从dubbo.properties中获取dubbo.registry.address的配置参数,构建RegistryConfig对象并赋值。

对于如下xml配置,也可以配置多个注册地址,用逗号分开。


生成的注册URL地址如下:




3 暴露服务

        服务暴露由ServiceConfig.export()方法处理,在该方法中首先获取配置参数exportdelay,参数export表示是否暴露此服务,参数delay表示是否延迟暴露;若exportfalse或者未配置,则不进行后续的暴露逻辑处理(doExport方法);若delay有值,则启动一个守护线程,在delay时间之后进行暴露业务逻辑处理(doExport方法)。doExport方法中,进行如下逻辑:

1)加载配置参数applicationmoduleregistrymonitorprotocol等标签模块数据;若module中配置了registrymonitor,而未单独配置这两个模块的数据,则以module中的registrymonitor配置参数为准。

2)检查标签ref的值是否为接口GenericService的实现,若是则直接初始化interfaceClass值为GenericService.class;否则若不是则以标签interface的值创建interfaceClass类,并且检查ref标签的类名是否为interfaceClass的实现类,若不是则直接报错。

3)若local标签值不为空,则初始化该标签值的class类;若stub标签值不为空,则初始化该标签值的stub类;这两个参数值是作为服务端在测试时的桩程序使用的。

4 )在调用 doExportUrls 方法,首先调用 loadRegistries 方法(第 3.2 小节)获取所有注册协议,然后遍历所有的服务暴露协议 protocol ,调用 ServiceConfig .doExportUrlsFor1Protocol( ProtocolConfig protocolConfig, List < URL > registryURLs) 方法把每个服务根据配置的服务协议 protocol 暴露处理并向所有注册协议中注册。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值