本次最佳实践结合Java示例代码,分别描述了在构建的Maven应用添加ACM配置管理或Nacos Config配置管理的详细过程。

背景信息

在传统的应用中修改变量值需要修改代码或配置文件,从而导致需要重新打包部署应用,这样不仅增加了运维的工作量,同时频繁部署应用容易导致业务中断,可能造成重大的业务影响。因为ACM、Nacos Config配置管理能实现实时修改变量及动态推送,使修改的变量值加载到Spring环境中,于是微服务应用集成ACM或Nacos Config配置管理功能变得极其有价值。

EDAS支持原生Spring Cloud微服务框架。您可直接将应用部署到EDAS上,无须修改代码、添加配置,即可获取EDAS企业级的应用托管、微服务治理(服务查询、金丝雀发布、离群实例摘除、无损下线)、监控报警和应用诊断等能力,帮助您全面提升应用的稳定性和安全性。

微服务应用集成ACM或Nacos Config功能部署至EDAS后,EDAS控制台提供可视化界面通过key value的形式修改应用中的变量值。本次最佳实践第三章节有详细步骤指导EDAS控制台配置管理操作、确认通过EDAS控制台配置管理修改的变量值是否实时在应用中生效以及通过结果验证步骤验证ACM或Nacos Config的配置管理功能是否被正确集成。使微服务在需要频繁修改的变量时,无需再修改代码或配置文件打包部署变更应用的琐碎操作,并减小微服务在变更中导致业务中断的重大影响。

组件介绍

  • Spring Cloud Alibaba ACM

    Spring Cloud Alibaba ACM是阿里云提供的商业版应用配置管理(Application Configuration Management) 产品,在Spring Cloud应用侧的客户端实现。

    Spring Cloud Alibaba ACM是Config Server和Client的替代方案,客户端和服务器上的概念与Spring Environment和PropertySource有着一致的抽象,在特殊的bootstrap阶段,配置被加载到Spring环境中。

  • Spring Cloud Alibaba Nacos

    在开发Spring Cloud应用时,您可以使用Nacos(https://nacos.io) 在本地实现应用的配置管理。同时,由于Nacos是应用配置管理ACM的开源版本,在将应用部署到EDAS后,对应用进行配置的管理和推送。

ACM配置管理

您可以按照以下操作完成ACM的配置。

  1. 修改代码信息完成ACM配置。
    1. pom.xml文件的导入依赖包:
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-alicloud-acm</artifactId>
          <version>0.2.2.RELEASE</version>
      </dependency>
    2. 在application.properties配置以下参数:
      spring.application.name=ans-service-consumer
      server.port=8082
      # ans directory
      and amc config
      spring.cloud.alicloud.ans.server-list=127.0.0.1
      spring.cloud.alicloud.ans.server-port=8080
    3. 编写Controller,自动注入一个属性value,且通过@Value注解指定从配置中取key为value的值:
      @RestController
      @RequestMapping(value = "/poc")
      @RefreshScope
      @Api(description = "Spring Cloud Alibaba-POC功能测试接口")
      public class ConsumerController {
          @Value("${value}")
          private String value = "123";
      
          @ApiOperation(value = "全局参数配置")
          @RequestMapping(value = "/echo-acm", method = RequestMethod.GET)
          public String choAcm() {
      
              return "配置文件中value的值:" + value + "\r\n";
      
          }
      }
  2. 通过EDAS的配置管理修改ACM示例代码中的配置。
    您可以将代码里的变量、参数等从代码中提取出来,并存入一个配置文件,运行代码时从该配置文件中获取变量和参数。这样做可以方便快速地更改参数和降低代码维护成本。本文介绍如何在ACM中创建一个这样的配置。
    1. 登录Apsara Stack控制台。
    2. 在左侧导航栏中单击云管控中心 > 中间件产品 > 分布式应用服务
    3. 管理控制台页面选择区域和部门后单击 EDAS按钮。
      EDAS
    4. EDAS控制台页面。单击左侧导航栏应用管理 > 配置管理,进入 配置管理页面。
      管理控制台
    5. 在页面右侧单击新建配置按钮。
    6. 在新建配置页面,按照以下表格的说明输入配置信息,并单击发布。
      名称 描述
      Data ID 配置ID,采用类似package.class(com.taobao.tc.refund.log.level)的命名规则保证全局唯一性,class部分建议是配置的业务含义。全部字符小写。不超过 256 个字符,且只允许英文字符和以下 4 种特殊字符:

      .:-_

      Group 配置分组(命名空间),建议填写产品名(如ACM)或者模块名,保证唯一性。后续可以根据Group进行鉴权。不超过128个字符,且只允许英文字符和以下4种特殊字符:

      .:-_

      描述 配置描述信息,方便其他人理解配置含义,不超过128个字符。
      目标地域 发布到当前地域。
      配置格式 选择一种格式,ACM会帮助您做格式校验。
      配置内容 配置的内容,建议不超过10KB,最大不超过100KB。
      新建配置

ACM实现配置结果验证

您可以按以下操作对ACM实现配置管理的结果进行验证。

  1. 执行命令curl http://<应用实例 IP>:<服务端口>,查看是否返回配置内容,如下图所示。
    返回配置
  2. 在EDAS控制台配置管理,编辑原先的配置内容修改为ACM,再执行命令curl http://<应用实例 IP>:<服务端口>,查看是否返回修改之后的配置内容:
    ACM验证结果验证1

Nacos Config配置管理

因为企业版V3.9.0开始统一支持Nacos,企业版V3.8.0和V3.8.1时通过ANS支持的Spring Cloud应用需要迁移到Nacos。

您可以按照以下操作完成Nacos Config的配置。

  1. 按示例中的方式改造Nacos Config代码。
    1. pom.xml文件的导入依赖包:
      <dependency>
          <groupId>com.alibaba.boot</groupId>
          <artifactId>nacos-config-spring-boot-starter</artifactId>
          <version>0.2.1</version>
      </dependency>
      <dependency>
          <groupId>com.alibaba.boot</groupId>
          <artifactId>nacos-config-spring-boot-actuator</artifactId>
          <version>0.2.1</version>
      </dependency>
    2. 在application.properties配置以下参数:
      spring.application.name=nacos-service-consumer
      server.port=8082
      # nacos directoryand amc config
      spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    3. 编写简Controller,自动注入一个属性userLocalCache,且通过@NacosValue注解指定从配置中取key为value的值:
      @RestController
      @RequestMapping(value = "/poc")
      @Api(description = "Spring Cloud Alibaba-POC功能测试接口")
      
      public class ConsumerController {
      
          @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
          private String useLocalCache;
      
          @ApiOperation(value = "全局参数配置")
          @RequestMapping(value = "/echo-acm", method = RequestMethod.GET)
          public String echoAcm() {
      
              return "配置文件中的value值:" + useLocalCache + "\r\n";
      
          }
      
      }
  2. Nacos Config实现配置管理。
    您可以将代码里的变量、参数等从代码中提取出来,并存入一个配置文件,运行代码时从该配置文件中获取变量和参数。这样做可以方便快速地更改参数和降低代码维护成本。本文介绍如何在Nacos Config中创建一个这样的配置。
    1. 登录Apsara Stack控制台。
    2. 在左侧导航栏中单击云管控中心 > 中间件产品 > 分布式应用服务
    3. 选择区域和部门后单击EDAS按钮,跳转到EDAS控制台
    4. 单击左侧导航栏应用管理 > 配置管理
    5. 配置管理页面,单击右侧新建配置 按钮。
    6. 设置Data ID、Group和配置内容,并单击发布
      Nacos config3

Nacos Config实现配置结果验证

您可以按以下操作对Nacos Config实现配置管理的结果进行验证。

  1. 执行命令curl http://<应用实例 IP>:<服务端口>,查看是否返回配置内容,如下图所示:
    结果验证2
  2. 在EDAS控制台配置管理,编辑原先的配置内容修改为nacos,再执行命令curl http://<应用实例IP>:<服务端口>,查看是否返回修改之后的配置内容:
    结果验证3结果验证4