SAE 将应用配置管理 ACM(Nacos 的正式商用组件)集成到控制台中,提供对应用的配置管理功能。本文以某Spring Cloud 应用的配置为例,介绍如何在本地接入 Nacos,并部署到 SAE 中,使用 ACM 实现配置管理功能。

背景信息

SAE 配置管理中心是开源 Nacos Server 的正式商用组件,以开源版本Spring Cloud Alibaba Nacos Config开发的应用可以直接使用 SAE 提供的商业版配置管理中心。

商业版的 SAE 配置管理中心,与 Nacos、Eureka、Zookeeper 和 Spring Cloud Config 相比,具有以下优势:
  • 共享组件:节省了你部署、运维 Nacos、Consul、ZooKeeper 或 Spring Cloud Config Server 的成本。
  • 实时推送:与 Spring Cloud Config 相比,商业版的 SAE 配置管理中心支持修改过的配置自动推送到监听的客户端。
  • 配置推送跟踪:可查询所有客户端配置推送状态和轨迹。

实现SAE 配置管理所需的工程师代码能力门栏低、操作简单。

  • 如果您完全不了解 Spring Cloud,只有简单的 Spring 和 Maven 基础。详细阅读本文后,您将了解如何使用 Spring Cloud Alibaba Nacos Config 实现 Spring Cloud 应用的配置管理。
  • 如果您熟悉 Spring Cloud 中配置管理组件(如 Consul Config 和 Spring Cloud Config),但尚未使用过 Spring Cloud Alibaba 的配置管理组件 Nacos Config,那么您只需要将这些配置组件的依赖和配置替换成 Spring Cloud Alibaba Nacos Config,并修改相应的配置项即可,无需修改任何代码。

    Spring Cloud Alibaba Nacos Config 同样实现了 Spring Cloud Config 的标准接口与规范,和您之前接入配置管理的方式基本一致。

  • 如果您已经熟悉如何通过开源版本的 Spring Cloud Alibaba Nacos Config 实现 Spring Cloud 应用的配置管理,那么您可以将应用直接部署到 SAE(详情请参见部署到 SAE),即可使用到 SAE 提供的商业版配置管理的能力。

本地开发

本文仅介绍实现SAE配置管理功能主要代码的改造方法,如果您想了解完整的 Spring Cloud 程序,可下载 nacos-config-example]。
说明 Spring Cloud Alibaba Nacos Config 完成了 Nacos 与 Spring Cloud 框架的整合,支持 Spring Cloud 的配置注入规范。
  1. 准备工作。
    在开始代码改造前,请确保您已经完成如下工作:
    项目 操作说明
    下载 Maven 并设置环境变量。 下载 Maven 并设置环境变量。
    下载最新版本的 Nacos Server。 下载最新版本的 Nacos Server
    启动 Nacos Server。
    1. 解压下载的 Nacos Server 压缩包。
    2. 进入nacos/bin目录,启动 Nacos Server。

      Linux/Unix/Mac 系统:执行命令sh startup.sh -m standalone

      Windows 系统:双击执行startup.cmd文件。

    在本地 Nacos Server 控制台新建配置。
    1. 登录本地 Nacos Server 控制台(用户名和密码默认同为 nacos)
    2. 在左侧导航栏中单击配置列表,在配置列表页面右上角单击新建配置图标
    3. 新建配置页面填入以下信息,然后单击发布

      Data ID: nacos-config-example.properties

      Group: DEFAULT_GROUP

      配置内容: test.name=nacos-config-test

  2. 使用 Nacos Config 实现配置管理。
    1. 创建名为 nacos-config-example的 Maven 工程。
    2. pom.xml文件中添加依赖。
      以 Spring Boot 2.1.4.RELEASE 和 Spring Cloud Greenwich.SR1 为例,依赖如下:
      <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>2.1.4.RELEASE</version>
          <relativePath/>
      </parent>
      
      <dependencies>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
          <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
              <version>0.9.0.RELEASE</version>
          </dependency>
      </dependencies>
      
      <dependencyManagement>
          <dependencies>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-dependencies</artifactId>
                  <version>Greenwich.SR1</version>
                  <type>pom</type>
                  <scope>import</scope>
              </dependency>
          </dependencies>
      </dependencyManagement>
      
      <build>
          <plugins>
              <plugin>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-maven-plugin</artifactId>
              </plugin>
          </plugins>
      </build>
      								
      示例中使用的版本为 Spring Cloud Greenwich ,对应 Spring Cloud Alibaba 版本为 0.9.0.RELEASE。
      • 如果使用 Spring Cloud Finchley 版本,对应 Spring Cloud Alibaba 版本为 0.2.2.RELEASE。
      • 如果使用 Spring Cloud Edgware 版本,对应 Spring Cloud Alibaba 版本为 0.1.2.RELEASE。
      说明 Spring Cloud Edgware 版本的生命周期即将在 2019 年 8 月结束,不推荐使用这个版本开发应用。
    3. src\main\java下创建 Packagecom.aliware.sae
    4. 在 Packagecom.aliware.sae中创建nacos-config-example 的启动类 NacosConfigExampleApplication
          import org.springframework.boot.SpringApplication;
          import org.springframework.boot.autoconfigure.SpringBootApplication;
      
          @SpringBootApplication
          public class NacosConfigExampleApplication {
              public static void main(String[] args) {
                  SpringApplication.run(NacosConfigExampleApplication.class, args);
              }
          }
      							
    5. 在 Packagecom.aliware.sae中创建 ControllerEchoController,自动注入一个属性userName,且通过@Value注解指定中从配置中 Key 为test.name去取值。
          import org.springframework.beans.factory.annotation.Value;
          import org.springframework.web.bind.annotation.RequestMapping;
          import org.springframework.web.bind.annotation.RestController;
      
          @RestController
          @RefreshScope
          public class EchoController {
      
              @Value("${test.name}")
              private String userName;
      
              @RequestMapping(value = "/")
              public String echo() {
                  return userName;
              }
          }
      							
    6. src\main\resources路径下创建文件bootstrap.properties,在bootstrap.properties中添加如下配置,指定 Nacos Server 的IP地址。
      其中 127.0.0.1:8848 为 Nacos Server 的地址,如果您的 Nacos Server 部署在另外一台机器,则需要修改成对应的 IP 和 端口。如果有其它需求,可以参考配置项参考bootstrap.properties文件中增加配置。
       spring.application.name=nacos-config-example
       server.port=18081
       spring.cloud.nacos.config.server-addr=127.0.0.1:8848
      								
    7. 执行NacosConfigExampleApplication中的 main 函数,启动应用。
  3. 结果验证。

    在浏览器访问 http://127.0.0.1:18081 ,可以看到返回值为 nacos-config-test ,该值即为在本地 Nacos Server 中新建配置中的配置内容,即test.name的值。

部署到 SAE

当在本地完成应用的开发和测试后,便可将应用程序打包并部署到 SAE。部署应用的详细步骤请参见应用部署概述

SAE 配置管理中心提供了正式商用版本 Nacos Server。当您将应用部署到 SAE 的时候,SAE 会通过优先级更高的方式去设置 Nacos Server 服务端地址和服务端口,以及 namespace、access-key、secret-key、context-path 信息。您无需进行任何额外的配置,原有的配置内容可以选择保留或删除。

  • 在部署应用前,需要在 SAE 控制台的配置管理中新建和本地 Nacos Server 中相同的配置,具体操作步骤如下:
    1. 登录 SAE 控制台
    2. 在左侧导航栏中选择配置管理
    3. 配置管理页面选择地域命名空间,单击页面右侧
    4. 新建配置页面设置 Data IDGroup配置内容,然后单击发布

      Data ID: nacos-config-example.properties

      Group: DEFAULT_GROUP

      配置内容: test.name=nacos-config-test

  • 初次通过SAE部署应用建议在控制台进行部署。如果使用 JAR 包部署,在创建应用时应用运行环境 须选 标准 Java 应用运行环境
    SAE第一次部署-应用基本信息

结果验证

  1. 部署完成后,可以通过查看日志确认应用是否启动成功。
  2. 执行命令curl http://<应用实例 IP>:<服务端口>,如curl http://192.168.0.34:8080 查看是否返回配置内容 nacos-config-test
  3. 在 SAE 控制台将原有配置内容修改为 nacos-config-test2,再执行命令curl http://<应用实例 IP>:<服务端口>,如curl http://192.168.0.34:8080,查看是否返回变更后的配置内容 nacos-config-test2

配置项参考

配置项 key 默认值 说明
服务端地址 spring.cloud.nacos.config.server-addr
DataId 前缀 spring.cloud.nacos.config.prefix ${spring.application.name} dataId 的前缀
Group spring.cloud.nacos.config.group DEFAULT_GROUP
dataID 后缀及内容文件格式 spring.cloud.nacos.config.file-extension properties dataId 的后缀,同时也是配置内容的文件格式,默认是 properties,支持 yaml 和 yml。
配置内容的编码方式 spring.cloud.nacos.config.encode UTF-8 配置的编码
获取配置的超时时间 spring.cloud.nacos.config.timeout 3000 单位为 ms
配置的命名空间 spring.cloud.nacos.config.namespace 常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源隔离等。
相对路径 spring.cloud.nacos.config.context-path 服务端 API 的相对路径
接入点 spring.cloud.nacos.config.endpoint UTF-8 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址。
是否开启监听和自动刷新 spring.cloud.nacos.config.refresh.enabled true 默认为 true,不需要修改。

更多配置项,请参考开源版本的 Spring Cloud Alibaba Nacos Config 文档