前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dubbo源码解析(1)概览

Dubbo源码解析(1)概览

作者头像
Java学习录
发布2020-03-20 20:41:24
5740
发布2020-03-20 20:41:24
举报
文章被收录于专栏:Java学习录Java学习录

本篇文章是Dubbo源码解析系列文章的第一篇,本系列文章分析基于Dubbo官方代码2.7.5-release版本,本篇文章并不会具体分析某一处的实现细节,只是会以一个宏观的角度来看一下一个服务提供者启动时涉及到的东西

打开Dubbo官方的demo中的这个项目:/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-provider

这个项目是一个简单的基于注解的服务提供者的demo项目,我们核心的东西都在启动类,我们来看一下都是有什么:

内容不是很多,main方法中Spring启动的相关源码之前的文章已经分析过了,就不再详细展开了,我们来看一下ProviderConfiguration里面的东西

注册中心

RegistryConfig这个bean是注册中心相关的配置,包含地址、用户名、密码、集群等等相关的配置,不再详细展开了

配置文件

使用@PropertySource注解加载配置文件,这个原理之前的文章也提到过了,不再展开

EnableDubbo

整个页面上好像也就剩下这个东西了,这个也是咱们的重中之重

属性

这个注解上包含三个属性

  1. 其中scanBasePackages、scanBasePackageClasses这两个属性都是给@DubboComponentScan这个注解的用的,看名字应该就很好理解,这个注解应该是dubbo模仿@ComponentScan实现的一个注解。不熟悉@ComponentScan注解的同学可以参考我之前的文章
  2. multipleConfig属性是给@EnableDubboConfig注解使用的,这个属性的含义为是否支持多配置
注解
EnableDubboLifecycle

这个注解配合@Import注解引入了类DubboLifecycleComponentRegistrar,关于@Import注解可参考我之前的文章,而DubboLifecycleComponentRegistrar这个类干了什么呢? 它主要注册了两个非常重要的监听器

  1. DubboLifecycleComponentApplicationListener,主要负责在Spring完成初始化或者销毁时对Dubbo中Lifecycle接口的实现类的处理
  2. DubboBootstrapApplicationListener,主要负责在Spring完成初始化或者销毁时对Dubbo的启动和销毁,这个是很重要的一块内容,后续会有好几篇文章来分析
EnableDubboConfig

同上一个注解,配合@Import注解引入了类DubboConfigConfigurationRegistrar,而这个类做了这么几个操作:

  1. 注册处理Dubbo中bean的name和别名的两个bean:NamePropertyDefaultValueDubboConfigBeanCustomizerDubboConfigAliasPostProcessor
  2. 根据注解上之前提到的multipleConfig属性来选择注册DubboConfigConfiguration类的两个实现。如下图所示,单配置和多配置使用的处理方式是不同的

注意这里面涉及到了两个注解@EnableConfigurationBeanBindings@EnableConfigurationBeanBinding,举个例子来表示下这两个注解的使用:将dubbo.application下的所有属性值都映射到ApplicationConfig这个类里面

DubboComponentScan

这个注解其实只看名字就可以猜测出来是干啥的,估计是模仿的@ComponentScan注解,接下来我们深入看一下

同前2个注解,配合@Import注解引入了类DubboComponentScanRegistrar,观察核心的方法

代码语言:javascript
复制
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
    Set<String> packagesToScan = getPackagesToScan(importingClassMetadata);
    registerServiceAnnotationBeanPostProcessor(packagesToScan, registry);
    registerReferenceAnnotationBeanPostProcessor(registry);
}
  1. 首先根据注解的属性basePackages、basePackageClasses获取扫描的包路径的集合
  2. 接着根据这个需要扫描的包路径的集合来注册bean:ServiceAnnotationBeanPostProcessor,这个bean其实跟@ComponentScan注解的处理类逻辑是差不多的,之前的文章已经写到过了,扫描@Service等注解,除了这些之外,这个bean还添加了处理Dubbo的com.alibaba.dubbo.config.annotation.Service注解
  3. 接着注册的beanReferenceAnnotationBeanPostProcessor,这个bean是用来给@Reference注解标注的属性中注入值的,后续会有文章专门介绍这个

看到这里,相信你已经发现了,现在已经出现了3个疑问了:

  1. Dubbo的启动和销毁都干了什么?
  2. Dubbo中消费者是如何注入的提供者的实现类的? 除此之外,你可能还会好奇:
  3. Dubbo中的SPI机制是什么呢?
  4. Dubbo是如何向zk等注册中心注册的呢?
  5. Dubbo协议什么时候开启的呢?
  6. Dubbo中的服务调用过程是什么样的?
  7. Dubbo中的服务路由、集群负载均衡等等是怎么做的呢?
  8. Dubbo控制台的原理是什么呢?
  9. 等等
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 注册中心
  • 配置文件
  • EnableDubbo
    • 属性
      • 注解
        • EnableDubboLifecycle
        • EnableDubboConfig
        • DubboComponentScan
    相关产品与服务
    微服务引擎 TSE
    微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档