Dubbo服务发现源码解析

  • 时间:
  • 浏览:4
  • 来源:大发5分6合APP下载_大发5分6合APP官网

com.alibaba.dubbo.demo.provider.DemoServiceImpl 是服务实现类。

com.alibaba.dubbo.demo.DemoService 是服务须要实现的接口。

2.3 配置文件的解析过程

基于dubbo.jar内的META-INF/spring.handlers配置,Spring在遇到dubbo名称空间时,会回调DubboNamespaceHandler。

所有dubbo的标签,都统一用DubboBeanDefinitionParser进行解析,基于一对一属性映射,将XML标签解析为Bean对象。

每个service依据的配置会解析成对应的 com.alibaba.dubbo.config.spring.ServiceBean 类的实例。

图中小方块Protocol, Cluster, Proxy, Service, Container, Registry, Monitor代细胞层或模块,蓝色的表示与业务有交互,绿色的表示只对Dubbo内内外部交互。

图中背景方块Consumer, Provider, Registry, Monitor代表部署逻辑拓普节点。

图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用。

图中只中含RPC的层,不中含Remoting的层,Remoting整体都隐含在Protocol中。

在 afterPropertiesSet 后, 会调用到 ServiceConfig.export() ,具体的调用栈如下

核心模块及其关系,如图所示:

关于Spring对象的生命周期,还须要参考 https://www.cnblogs.com/zrtqsk/p/3735273.html

下面大伙的分析以最基础也是应用最广泛的Spring配置依据为例。

2.2 配置信息

在配置文件中,所有dubbo的标签,都统一用DubboBeanDefinitionParser进行解析,基于一对一属性映射,将XML标签解析为Bean对象。

相关信息还须要参考: Dubbo中对Spring配置标签扩展(http://www.cnblogs.com/ghj1976/p/5379332.html

注解驱动(Annotation-Driven)

内外部化配置(External Configuration)

以及自动装配(Auto-Configure)

具体的还须要参考 http://dubbo.apache.org/zh-cn/blog/dubbo-annotation.html

一、源码模块

1.1 源码模块组织

Dubbo工程是一另另一个多Maven多Module的项目,以包价值形式来组织各个模块。

2.4 服务注册和引用

在Bean对象实例化的过程中,参考Spring Bean对象的生命周期,依次实现了不同的依据完成注册和引用。

以 dubbo-demo-provider 为例, 它的配置文件如下:

2.1 多种启动依据

除了XML依据,Dubbo的服务Config还支持多种依据,包括

1.2 模块说明

dubbo-common 公共逻辑模块,包括Util类和通用模型。

dubbo-remoting 远程通讯模块,合适Dubbo协议的实现,机会RPC用RMI协议则不须要使用此包。

dubbo-rpc 远程调用模块,抽象各种协议,以及动态代理,只中含一对一的调用,不关心集群的管理。

dubbo-cluster 集群模块,将多个服务提供方伪装为一另另一个多提供方,包括:负载均衡、容错、路由等,集群的地址列表还须要是静态配置的,也还须要是由注册中心派发。

dubbo-registry 注册中心模块,基于注册中心派发地址的集群依据,以及对各种注册中心的抽象。

dubbo-monitor 监控模块,统计服务调用次数,调用时间的,调用链跟踪的服务。

dubbo-config 配置模块,是Dubbo对外的API,用户通过Config使用Dubbo,隐藏Dubbo所有细节。

dubbo-container 容器模块,是一另另一个多Standalone的容器,以简单的Main类加载Spring启动,机会服务通常不须要Tomcat/JBoss等Web容器的价值形式,没必要用Web容器去加载服务。机会服务通常不须要 Tomcat/JBoss 等 Web 容器的价值形式,没必要用 Web 容器去加载服务。

二、服务发现

Dubbo的应用会在启动时完成服务注册或订阅(不论是生产者,还是消费者)如下图所示。