zoukankan      html  css  js  c++  java
  • 第二章:(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
  • 相关阅读:
    luogu 2617
    BZOJ 3295
    BZOJ 2458
    luogu 3810
    Uva
    Uva
    Uva
    Uva
    Uva
    成员函数的const到底修饰的是谁
  • 原文地址:https://www.cnblogs.com/niujifei/p/15795662.html
Copyright © 2011-2022 走看看