Dubbo

Dubbo源码分析(一)启动Provider

Dubbo是阿里巴巴开源的一个分布式服务框架,在阿里内部和其他公司都有广泛的应用,是目前比较成熟的一个服务框架。笔者将从源码层面对Dubbo进行分析,学习其中优秀的设计。

经过数年的沉淀,Dubbo整体的设计和抽象已非常完善,这里介绍的Provider启动就涉及到了多个抽象模型。本文使用的版本为2.5.3。

首先,当发布一个服务的Server时,我们需要编写一个Spring配置文件。

其中关键的一行为<dubbo:service ...>,这里使用了扩展的Spring Schema,相关定义在Dubbo jar包META-INF目录下的spring.handlers、spring.schemas、dubbo.xsd中。指定的配置解析器为com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler,所以它也就成了启动provider的“应用程序入口”

DubboNamespaceHandler的逻辑很简单,就是将xml文件中的配置信息转换成对应的bean,继续看关键的com.alibaba.dubbo.config.spring.ServiceBean

经过大段配置代码后来到父类ServiceConfig的export()方法,它将启动负责provider网络通信的Server并将服务地址发布出去。最终调用到doExportUrlsFor1Protocol()

  • Invoker - 执行具体的远程调用
  • Protocol - 服务地址的发布和订阅
  • Exporter - 暴露服务的引用,或取消暴露

Protocol的具体实现类由配置指定,默认创建一个DubboProtocol,其export()方法转到openServer()与createServer()

requestHandler包含通信协议的主要处理逻辑,而server的创建来自Exchangers

getExchanger()获取的实例也来源于配置,默认返回HeaderExchanger

可以看到Server与Client实例均是在这里创建的,HeaderExchangeServer需要一个Server类型的参数,来自Transporters.bind()

getTransporter()获取的实例来源于配置,默认返回一个NettyTransporter

最终来到了NettyServer,在它的doOpen()方法中看到了我们熟悉的Netty Bootstrap

文中提到的核心类包括

  1. DubboNamespaceHandler
  2. ServiceBean
  3. ServiceConfig
  4. DubboProtocol
  5. Exchangers
  6. HeaderExchanger
  7. HeaderExchangeServer
  8. NettyTransporter
  9. NettyServer

至此,所有Provider启动的工作结束了,接下来就是接收请求并交给handler处理的过程,这些将在后面的文章予以介绍。

 

© 2015, 高飞航.cn. 版权所有.

About gaofeihang

开发工程师,本站的作者。欢迎留下您宝贵的意见!

发表评论

电子邮件地址不会被公开。 必填项已用*标注