通用配置说明

    ServiceComb提供了分层次的配置机制。按照优先级从高到低,分为:

    • 配置中心(动态配置)
    • Java System Property(-D参数)
    • 环境变量
    • 配置文件

    配置文件默认是classpath下的microservice.yaml文件。ServiceComb-Java-Chassis启动时会从classpath的各个jar包、磁盘 目录中加载microservice.yaml文件,并将这些文件合并为一份microservice.yaml配置。位于磁盘上的microservice.yaml 文件优先级高于jar包中的microservice.yaml文件。用户还可以通过在配置文件中指定来指定优先级, 如果不同路径下的 microservice.yaml 包含一样的配置项,文件中 servicecomb-config-order 值大的配置项会覆盖值小的配置项。

    默认的配置文件名为microservice.yaml,但是我们可以通过设置Java System Property来增加其他的配置文件,或修改默认的配置文件名:

    Linux的环境变量名不允许带.符号,因此某些配置项无法直接配置在环境变量里。可以将配置项key的.符号改为下划线_,将转换后的配置项配在环境变量里,ServiceComb-Java-Chassis可以自动将环境变量匹配到原配置项上。

    例如:对于microservice.yaml中配置的

    可以在环境变量中设置servicecomb_rest_address=0.0.0.0:9090来将服务监听的端口覆写为9090。这种下划线转点号的机制也适用于其他的配置层级。

    配置中心是微服务架构下一个非常重要的中间件,通过配置中心用户可以增加和删除配置信息,配置信息会通过不同的通知机制(通常包括 PULL 和 PUSH), 将配置的变化推送到微服务实例。 java-chassis 允许用户使用不同的配置中心, 目前支持用户使用如下几种配置中心:

    • 华为云配置中心

    使用华为云配置中心,需要在项目中引入如下依赖:

    1. <dependency>
    2. <groupId>org.apache.servicecomb</groupId>
    3. <artifactId>config-cc</artifactId>
    4. </dependency>

    然后在配置文件 microservice.yaml 中增加如下配置项:

    1. servicecomb:
    2. config:
    3. serverUri: http://127.0.0.1:30113
    4. refreshMode: 0
    5. refresh_interval: 5000
    6. refreshPort: 30114

    华为云配置中心的其他配置项含义如下:

    • 使用 servicecomb-kie

    servicecomb-kie 是全新设计的配置中心。 从 2.0.0 版本开始, java-chassis 支持使用 servicecomb-kie。 servicecomb-kie 的安装指导可以参考官网文档。 在 java-chassis 中使用 servicecomb-kie, 需要引入下面的依赖:

    1. <dependency>
    2. <groupId>org.apache.servicecomb</groupId>
    3. <artifactId>config-kie</artifactId>
    4. </dependency>

    然后在配置文件 microservice.yaml 中增加如下配置项:

    servicecomb-kie 的配置项及其含义如下:

    • 使用 nacos

    是 alibaba 提供的配置中心。 java-chassis 从 2.0.0 版本支持 nacos。 nacos的下载安装请参考官网介绍。

    使用nacos,需要在项目中引入如下依赖:

    1. <dependency>
    2. <groupId>org.apache.servicecomb</groupId>
    3. <artifactId>config-nacos</artifactId>
    4. </dependency>
    1. servicecomb:
    2. nacos:
    3. serverUri: http://127.0.0.1:8848
    • 使用 Apollo

    Apollo 是携程框架部门研发的分布式配置中心。 Apollo的下载安装请参考官网介绍。

    1. <dependency>
    2. <groupId>org.apache.servicecomb</groupId>
    3. <artifactId>config-apollo</artifactId>
    4. </dependency>

    然后在配置文件 microservice.yaml 中增加如下配置项:

    Java-Chassis支持使用一致的API获取配置,不必关注配置的来源位置:

    1. DynamicDoubleProperty myprop = DynamicPropertyFactory.getInstance().getDoubleProperty("trace.handler.sampler.percent", 0.1);

    以上例子表示声明了一个key为trace.handler.sampler.percent的动态配置对象,默认值为0.1。用户可以选择在microservice.yaml文件、环境变量、Java System Property或配置中心里配置trace.handler.sampler.percent来修改配置项的值。用户不需要关注从哪里读取配置项的值,Java-Chassis会自动从各处读取配置,并按照上文的优先级顺序进行合并以保证用户取到的是优先级最高的配置值。

    关于配置项API的具体方法可参考。

    开发者可以注册callback处理配置变更:

    1. myprop.addCallback(new Runnable() {
    2. public void run() {
    3. // 当配置项的值变化时,该回调方法会被调用
    4. System.out.println("trace.handler.sampler.percent is changed!");
    5. }
    6. });

    有些情况下,我们要屏蔽我们使用的一些开源组件的配置并给用户提供我们自己的配置项。在这种情况下,可以通过classpath下的mapping.yaml进行映射定义:

    1. registry:
    2. client:
    3. serviceUrl:
    4. defaultZone: eureka.client.serviceUrl.defaultZone

    定义映射后,在配置装载的时候框架会默认进行映射,把我们定义的配置项映射为开源组件可以认的配置项。