更新时间:2024-10-23 GMT+08:00

Java Chassis使用配置中心

  • Java Chassis使用以config-center命名的配置中心。

    需要在项目中增加如下依赖:

    <dependency>
      <groupId>org.apache.servicecomb</groupId>
      <artifactId>config-cc</artifactId>
    </dependency>

    如果项目已经直接或者间接包含如上依赖,则无需添加。Java Chassis包含如表1所示配置项,这些配置项的值指定了微服务在配置中心的身份,以及微服务和配置中心之间的交互。

    表1 Java Chassis常用配置项

    配置项

    含义

    缺省值

    备注

    servicecomb.service.application

    所属应用

    default

    -

    servicecomb.service.name

    微服务名称

    defaultMicroservice

    -

    servicecomb.service.version

    微服务版本

    1.0.0.0

    -

    servicecomb.service.environment

    环境

    -

    取值为环境ID。如production,development等。

    servicecomb.config.client.serverUri

    访问地址,格式为http(s)://{ip}:{port},以“,”分隔多个地址

    http://127.0.0.1:30103

    config-center

    servicecomb.config.client.tenantName

    应用的租户名称

    default

    config-center

  • Java Chassis使用以kie命名的配置中心。
    需要在项目中增加如下依赖:
    <dependency>
      <groupId>org.apache.servicecomb</groupId>
      <artifactId>config-kie</artifactId>
    </dependency>

    如果项目已经直接或者间接包含如上依赖,则无需添加。Java Chassis包含如表2所示配置项,这些配置项的值指定了微服务在配置中心的身份,以及微服务和配置中心之间的交互。

    表2 Java Chassis常用配置项

    配置项

    含义

    缺省值

    备注

    servicecomb.service.application

    所属应用

    default

    -

    servicecomb.service.name

    微服务名称

    defaultMicroservice

    -

    servicecomb.service.version

    微服务版本

    1.0.0.0

    -

    servicecomb.service.environment

    环境

    -

    取值为环境ID。如production,development等。

    servicecomb.kie.serverUri

    kie访问地址,格式为http(s)://{ip}:{port},以“,”分隔多个地址

    -

    kie

    servicecomb.kie.firstRefreshInterval

    首次刷新配置项的时间间隔,单位为毫秒

    3000

    kie

    servicecomb.kie.refresh_interval

    刷新配置项的时间间隔,单位为毫秒

    3000

    kie

    servicecomb.kie.domainName

    应用的租户名称

    default

    kie

Java Chassis有多种方式可以读取动态配置。
  • 第一种是使用archaius API,例子如下:
    DynamicDoubleProperty myprop = DynamicPropertyFactory.getInstance()
      .getDoubleProperty("trace.handler.sampler.percent", 0.1);
    

    archaius API支持callback处理配置变更:

    myprop.addCallback(new Runnable() {
          public void run() {
              // 当配置项的值变化时,该回调方法会被调用
              System.out.println("trace.handler.sampler.percent is changed!");
          }
      });
    
  • 第二种方式是使用Java Chassis提供的配置注入机制,使用这种方式能够非常简单的处理复杂配置,和配置优先级,例子如下:
      @InjectProperties(prefix = "jaxrstest.jaxrsclient")
      public class Configuration {
        /*
         * 方法的 prefix 属性值 "override" 会覆盖标注在类定义的 @InjectProperties
         * 注解的 prefix 属性值。
         *
         * keys属性可以为一个字符串数组,下标越小优先级越高。
         *
         * 这里会按照如下顺序的属性名称查找配置属性,直到找到已被配置的配置属性,则停止查找:
         * 1) jaxrstest.jaxrsclient.override.high
         * 2) jaxrstest.jaxrsclient.override.low
         *
         * 测试用例:
         * jaxrstest.jaxrsclient.override.high: hello high
         * jaxrstest.jaxrsclient.override.low: hello low
         * 预期:
         * hello high
         */
        @InjectProperty(prefix = "jaxrstest.jaxrsclient.override", keys = {"high", "low"})
        public String strValue;
    

    执行注入:

     ConfigWithAnnotation config = SCBEngine.getInstance().getPriorityPropertyManager()
          .createConfigObject(Configuration.class,
                "key", "k");
    
  • 第三中方式在和Spring、Spring Boot集成的时候使用,可以按照Spring、Spring Boot的原生方式读取配置,比如@Value、@ConfigurationProperties。Java Chassis将配置层次应用于Spring Environment中,Spring和Spring Boot读取配置的方式,也能够读取到microservice.yaml和动态配置的值。

    有关Java Chassis读取配置的更多内容,请参考社区开发指南