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处理的过程,这些将在后面的文章予以介绍。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值