You need to enable JavaScript to run this app.
导航

基于 Spring Cloud 使用 Nacos 配置中心

最近更新时间2024.01.02 16:40:45

首次发布时间2022.05.16 14:37:45

本文主要面向 Spring Cloud 的使用者,通过示例介绍如何使用 MSE Nacos 来实现配置管理。

说明

  • 本文介绍如何使用配置中心,如果需要支持服务发现功能,需要配置注册中心,详细说明参见 基于 Spring Cloud 使用 Nacos 服务注册中心
  • 通过私网连通时,集群和微服务引擎实例需要部署在相同 VPC中。关于 Nacos Spring Cloud 的详细说明参见 Nacos Config

背景信息

  • Spring Cloud 是一系列微服务场景解决方案的集合。Spring Cloud 基于 Spring Boot 的开发便利性,实现了分布式系统基础设施的一键启动和部署。例如发现注册、配置中心、负载均衡等产品的一键启动和部署。
  • Spring Boot 是由 Pivotal 团队提供的开发框架,用于简化新 Spring 应用的初始搭建以及开发过程。

前提条件

  • 已创建微服务引擎实例,操作说明参见 创建实例
  • 已创建容器服务集群,并开启 公网访问,操作说明参见 创建集群

    注意

    通过私网连通时,容器服务集群需要和微服务引擎实例处于同一个 VPC。

  • 已安装 Maven,操作说明参见 Downloading Apache Maven
  • 已安装 Docker,操作说明参见 Get Docker

操作步骤

步骤一:发布配置

通过控制台发布配置

  1. 登录 Nacos 控制台,操作说明参见 登录 Nacos 控制台

  2. 在左侧菜单栏,单击 配置管理 > 配置列表

  3. 单击添加图标。

  4. 新建配置 页面添加配置参数。

    • Data ID:example.properties
    • 配置格式:TEXT
    • 配置内容:useLocalCache=true

    alt

通过 OpenAPI 发布配置

支持通过调用 Nacos Open API 向 Nacos Server 发布配置。其中 ServiceIP 为 MSE Nacos 的私网或公网访问地址,支持在微服务引擎实例的 基本信息 > 私网地址公网地址 位置查看。

curl -X POST "http://${ServiceIP}:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=true"

步骤二:配置管理

说明

mse-demo-config Spring Boot 工程默认端口为 8080

  1. 创建名称为 mse-demo-config 的 Maven 工程。
  2. pom.xml 文件中添加依赖:

    说明

    POM 文件中 Spring Boot 的版本信息参见 Nacos 接入版本对应关系

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.12.RELEASE</version>
    <relativePath/>
</parent>
<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>2.2.8.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR12</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
          <dependency>
              <groupId>com.alibaba.nacos</groupId>
              <artifactId>nacos-client</artifactId>
              <version>2.1.2</version>
          </dependency>          
    </dependencies>
</dependencyManagement>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  1. src\main\resources 路径下创建文件 bootstrap.properties

    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    spring.application.name=example
    spring.cloud.nacos.config.username=nacos
    spring.cloud.nacos.config.password=nacos
    
    参数说明
    spring.cloud.nacos.discovery.server-addrNacos Server 的地址,即 MSE Nacos 实例私网或公网访问地址,支持在微服务引擎实例的 基本信息 > 私网地址公网地址 位置查看。
    spring.application.name应用的名称。
    spring.cloud.nacos.config.usernameNacos 账号用户名。
    spring.cloud.nacos.config.passwordNacos 账号密码。

    说明

    • 需要配置 spring.application.name,以匹配 DataId。详情参见 Nacos Spring Cloud 快速开始
    • MSE Nacos 默认开启鉴权,用户必须配置鉴权后才能使用。初始用户名和密码为都为 nacos,与控制台访问用户名相同。后续如需更改,支持通过控制台或 OpenAPI 实现。
  2. src\main\java 路径下创建名为 com.bytedance.msePackage

  3. com.bytedance.mse中创建类 ConfigApplication,代码如下。

    package com.bytedance.mse;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    /**
      * Document: https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
      */
    @SpringBootApplication
    public class ConfigApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ConfigApplication.class, args);
        }
    }
    
  4. com.bytedance.mse 中创建 Java 类 ConfigController,代码如下。ConfigController 通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新。

    package com.bytedance.mse;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/config")
    @RefreshScope
    public class ConfigController {
    
        @Value("${useLocalCache:false}")
        private boolean useLocalCache;
    
        /**
              * http://{{yourAddress}}/config/get
              */
        @RequestMapping("/get")
        public boolean get() {
            return useLocalCache;
        }
    }
    
  5. 在项目路径添加 Dockerfile。

    说明

    路径地址示例 /Users/bytedance/IdeaProjects/mse-demo-config

    FROM openjdk:11-jdk-slim
    ARG JAR_FILE=target/*.jar
    COPY ${JAR_FILE} app.jar
    ENTRYPOINT ["java","-jar","/app.jar"]
    
  6. 在 Terminal 执行以下操作。

    mvn package && docker build -t mse-demo/mse-demo-config .
    
  7. 推送 Docker 镜像至镜像仓库,操作说明参见 推送和拉取镜像

  8. 在容器服务创建无状态负载。操作说明参见 创建无状态负载

结果验证

通过编辑 Nacos 配置文档中的配置内容,动态变更容器服务的配置。

  1. 访问 http://{{容器服务外部端点地址}}/config/get,返回内容是 true
  2. 重复发布配置,将配置内容改为 useLocalCache=false。操作说明参见 发布配置
    alt
  3. 再次访问 http://{{容器服务外部端点地址}}/config/get,此时返回内容为false