第二章:(1)Dubbo 配置

一、Dubbo 配置方式

  可以采用不同的方式来配置 Dubbo 应用

  配置概述

  Dubbo配置介绍

  API 配置

  以API 配置的方式来配置你的 Dubbo 应用

  XML 配置

  以 XML 配置的方式来配置你的 Dubbo 应用

  注解配置

  以注解配置的方式来配置你的 Dubbo 应用

  属性配置

  以属性配置的方式来配置你的 Dubbo 应用

  外部化配置

  将Dubbo应用的配置放到外部集中管理

  自动加载环境变量

  在 Dubbo 中自动加载环境变量

 

二、配置组件

  Dubbo框架的配置项比较繁多,为了更好地管理各种配置,将其按照用途划分为不同的组件,最终所有配置项都会汇聚到URL中,传递给后续处理模块。

  常用配置组件如下:

application: Dubbo应用配置
registry: 注册中心
protocol: 服务提供者RPC协议
config-center: 配置中心
metadata-report: 元数据中心
service: 服务提供者配置
reference: 远程服务引用配置
provider: service的默认配置或分组配置
consumer: reference的默认配置或分组配置
module: 模块配置
monitor: 监控配置
metrics: 指标配置
ssl: SSL/TLS配置

  

  consumer 与 reference的关系

  reference可以指定具体的consumer,如果没有指定consumer则会自动使用全局默认的consumer配置。

  consumer的属性是reference属性的默认值,可以体现在两个地方:

  1. 在刷新属性(属性覆盖)时,先提取其consumer的属性,然后提取reference自身的属性覆盖上去,叠加后的属性集合作为配置来源之一。
  2. 在组装reference的URL参数时,先附加其consumer的属性,然后附加reference自身的属性。

可以将consumer组件理解为reference组件的虚拟分组,根据需要可以定义多个不同的consumer,不同的consumer设置特定的默认值, 然后在reference中指定consumer或者将<dubbo:reference /> 标签嵌套在<dubbo:consumer />标签之中。

  provider 与 service的关系

  service可以指定具体的provider,如果没有指定则会自动使用全局默认的provider配置。 provider的属性是service属性的默认值,覆盖规则类似上面的consumer与reference,也可以将provider理解为service的虚拟分组。

三、配置来源

  1、配置来源

    从Dubbo支持的配置来源说起,默认有6种配置来源:

JVM System Properties,JVM -D 参数
System environment,JVM进程的环境变量
Externalized Configuration,外部化配置,从配置中心读取
Application Configuration,应用的属性配置,从Spring应用的Environment中提取"dubbo"打头的属性集
API / XML /注解等编程接口采集的配置可以被理解成配置来源的一种,是直接面向用户编程的配置采集方式
从classpath读取配置文件 dubbo.properties

  2、覆盖关系

  下图展示了配置覆盖关系的优先级,从上到下优先级依次降低:

  

     

  JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。

  XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的相应配置项无效。

  Properties 最后,相当于缺省值,只有 XML 没有配置时,dubbo.properties 的相应配置项才会生效,通常用于共享公共配置,比如应用名。

四、配置方式

  按照驱动方式可以分为以下四种方式:

  API配置

  以Java编码的方式组织配置,包括Raw API和Bootstrap API,具体请参考API配置

  XML配置

  以XML方式配置各种组件,支持与Spring无缝集成,具体请参考XML配置

  Annotation配置

  以注解方式暴露服务和引用服务接口,支持与Spring无缝集成,具体请参考Annotation配置

  属性配置

  根据属性Key-value生成配置组件,类似SpringBoot的ConfigurationProperties,具体请参考属性配置

  属性配置的另外一个重要的功能特性是属性覆盖,使用外部属性的值覆盖已创建的配置组件属性。

  如果要将属性配置放到外部的配置中心,请参考外部化配置

  除了外围驱动方式上的差异,Dubbo的配置读取总体上遵循了以下几个原则:

  1. Dubbo 支持了多层级的配置,并按预定优先级自动实现配置间的覆盖,最终所有配置汇总到数据总线URL后驱动后续的服务暴露、引用等流程。
  2. 配置格式以 Properties 为主,在配置内容上遵循约定的 path-based 的命名规范

五、配置加载流程

  

  从上图可以看出,配置加载大概分为两个阶段:

  • 第一阶段为DubboBootstrap初始化之前,在Spring context启动时解析处理XML配置/注解配置/Java-config 或者是执行API配置代码,创建config bean并且加入到ConfigManager中。
  • 第二阶段为DubboBootstrap初始化过程,从配置中心读取外部配置,依次处理实例级属性配置和应用级属性配置,最后刷新所有配置实例的属性,也就是属性覆盖

六、dubbo.properties 怎么写

  可以将 xml 的 tag 名和属性名组合起来,用 ‘.’ 分隔。每行一个属性。

dubbo.application.name=foo 相当于 <dubbo:application name="foo" />
dubbo.registry.address=10.20.153.10:9090 相当于 <dubbo:registry address="10.20.153.10:9090" />

  

  如果在 xml 配置中有超过一个的 tag,那么你可以使用 ‘id’ 进行区分。如果你不指定id,它将作用于所有 tag。

dubbo.protocols.rmi.port=1099 相当于 <dubbo:protocol id="rmi" name="rmi" port="1099" />
dubbo.registries.china.address=10.20.153.10:9090 相当于 <dubbo:registry id="china" address="10.20.153.10:9090" />

  dubbo.properties 示例:

# Dubbo Protocol
dubbo.protocol.name=dubbo
dubbo.protocol.port=20882
原文地址:https://www.cnblogs.com/niujifei/p/15795662.html