Dubbo Config层解析
发表时间 2020-03-26  |  浏览量:  |  分类: dubbo

Dubbo Config层

AbstractConfig类

该类包含了一些工具方法,这些方法的主要作用是解析配置并将其赋值给相关的对象。

refresh方法

构造出CompositeConfiguration对象,该对象内部包含了一些列的配置数据源,当获取某个配置时,会按照顺序从这个写数据源中获取,实现配置数据源的优先级语义,其优先级有两种情况:

实际上,系统变量总是优先级最高的,其次是环境变量(2.7.6-SNAPSHOT)。

配置中心优先

  1. 系统变量:以System.getProperty方式获取系统变量
  2. 环境变量:以System.getenv方式获取环境变量
  3. 应用外部配置:如果有配置appConfigFile,则会解析该配置对应的文件,否则解configFile配置对应的文件,默认为dubbo.property
  4. 外部配置:默认会解析dubbo.properties文件
  5. AbstractConfig:当前AbstractConfig实现类所配置的属性
  6. PropertyConfiguration,这个内部优先使用系统 变量 获取,如果没有的话,在尝试使用共享外部配置获取

然后遍历实现类的所有方法,找出其setter方法和setParameters方法,并从CompositeConfiguration中获取与之对应的配置,如果存在则将值覆盖。

AbstractMethodConfig

继承自AbstractConfig,添加了针对方法的配置,如:重试次数、mock、是否异步、超时时间等。

AbstractInterfaceConfig

继承自AbstractMethodConfig,添加了服务提供者和消费者的共有配置,如:本地存根、代理生成方式、授权信息、服务范围、过滤器、监听器等。

除配置外,该抽象类还提供一下几个功能:

  1. convertRegistryIdsToRegistries:该抽象类还提供将配置的registryId转为RegistryConfg的功能,如果该接口没有配置registryId,且也没获取到默认的注册中心 (可能还未加载注册中心的配置),则会构造RegistryConfig对象,并通过refresh加载配置,作为该接口的注册中心配置。

    如果该接口配置了registryId,则会尝试将从ConfigManager中加载对应的RegistryConfig,如果没有的话则新建。

  2. completeCompoundConfigs:设置默认配置,如接口未配置application、registries、monitor等,则从其他AbstractInterfaceConfig中取配置。如服务提供者的默认配置可以由provider标签提供,服务消费者的默认配置可以由consumer标签提供

  3. appendRuntimeParameters:为实现类添加运行时配置,如pid、时间戳、dubbo版本号等。

  4. checkInterfaceAndMethods:检查interface配置和method配置的合法性 ,如:method标签的name字段必须配置;method标签配置的方法在interface配置的接口中必须存在对应的方法声明;

  5. checkStubAndLocal:检查存根的配置有效性,如:存根类是否实现了对应的RPC接口;存根类是否有一个参数为RPC接口的构造器。

AbstractServiceConfig

继承自AbstractInterfaceConfig,添加了服务提供者的专有配置,如:version、group、weight等。

AbstractReferenceConfig

继承自AbstractInterfaceConfig,添加了服务消费者的专有配置,如:check、init、injvm、lazy等。

ProviderConfig

继承自AbstractServiceConfig,添加了服务提供的默认配置,如:监听端口、线程池配置、buffer大小等。

ServiceConfigBase

继承自AbstractServiceConfig,添加了服务提供者的接口配置,如:接口名、接口类、服务名、引用的provider配置、引用真正服务对象(ref)。

除此之外,该抽象类还提供以下功能:

  1. 以Service注解为参数的构造器:将Service注解配置的值添加到该类,也就是@Service上配置的参数就是在这个构造器内,通过调用AbstractConfig.appendAnnotation注入到该类上。
  2. convertProtocolIdsToProtocols:将protocolIds配置转为对应的ProtocolConfig,具体过程与AbstractInterfaceConfig.convertRegistryIdsToRegistries类似。

ServiceConfig

继承自ServiceConfigBase,该类主要实现了服务的暴露和取消暴露功能,具体的逻辑较为复杂,另外分析。

ServiceBean

继承自ServiceConfig,该类在dubbo的spring模块中,提供了与spring集成的能力。

ReferenceConfigBase

继承自AbstractReferenceConfig,添加了服务消费者的接口配置,如:接口名、接口类、url、引用的consumer配置、protocol等。

除此之外,该抽象类还提供以下功能:

  1. 以Reference注解为参数的构造器:将Reference注解配置的值添加到该类,也就是@Reference注解的值就是在这个构造器内,通过调用AbstractConfig.appendAnnotation注入到该类上。
  2. resolveFile:从系统变量或者dubbo-resolve.properties文件中读取特定接口的服务提供方信息,场景就是直连提供者 。

ConsumerConfig

继承自AbstractReferenceConfig,添加了服务消费者的默认配置,如:线程池配置。

ReferenceConfig

继承自ReferenceConfigBase ,该类实现了服务消费者接口的初始化和生成代理的功能,具体的实现逻辑较为复杂,另外分析。

ReferenceBean

继承自ReferenceConfig,该类在dubbo的spring模块中,提供了与spring集成的能力。

关闭