Dubbo–启动过程
写在前面
本文参考了Dubbo官方手册结合Dubbo2.6.1版本源码分析。推荐先阅读官方手册。
鉴于个人水平有限,如有不正确的地方请指出,欢迎一起讨论,谢谢!
启动过程
启动过程主要从Provider和Consumer进行分析。每个Provider最终会实例化为一个ServiceBean的实例,而每个Consumer通过实现自FactoryBean接口的ReferenceBean在首次调用时创建代理实例(也可以通过init属性设置非延迟加载)。
Provier启动过程(暴露服务)
Provider的启动过程默认由afterProperties方法触发,也可以通过Spring的刷新事件触发或者定时触发(通过delay属性控制),不需要通过代码getBean即可完成Provider的启动。
整个启动过程围绕两个URL,一个是调用服务的URL,另一个是同Registry通信的URL。在整个启动过程中通过向URL添加、读取属性(主要是Protocol)、参数,来串联起整个过程中的扩展(Trasport/Protocol等)的指定和启动的处理逻辑。
完成启动步骤(ServiceConfig.doExport()方法)概述如下:
检查并设置exported属性
检查默认配置,即检查provider属性是否为空,为空则实例化一个。
依照provider->module->application的顺序设置自身为空的属性(说明自身设置优先级高,且配置优先级privider>module>application)。
检查Provider提供服务的接口是否有服务方法以及接口实现类是否实现自接口。
检查application、registry、protocol配置,如果对应对象不存在则进行处理。
对本对象进行属性设置,属性值来源于-D或者properties配置文件,优先-D。
检查stub、local、mock配置,类是非存在、配饰是否合法、执行的构造器是否存在等。
- stub,在客户端执行,用于客户端调用服务端时进行调用预处理或异常处理。相当于服务端对客户端的要求,客户端在调用时使用的是stub类。
- local,已废弃,被stub取代。
- mock,在客户端执行,专门用于调用服务端发生异常时进行异常处