weblog/doc/6、Nacos 注册中心搭建/6.2 整合 Nacos 配置中心:实现动态配置刷新.md
2025-02-17 10:05:44 +08:00

8.9 KiB
Raw Blame History

上小节 中,我们已经将本地的 Nacos 环境搭建好了。这小节中,我们将感受一下 Nacos 中一个非常重要的功能 —— 配置中心

什么是配置中心?

在微服务架构下,配置中心是一个专门用来集中管理和分发配置的服务。它通过提供统一的接口,帮助开发人员将所有微服务的配置项集中存储、管理和分发,确保微服务在不同环境下(如开发、测试、生产环境)能够方便地获取到对应的配置。

为什么需要配置中心?

  1. 集中管理,简化运维 在传统的单体应用中,配置项通常存储在本地文件中,管理和维护相对简单。但在微服务架构下,配置项分散在多个服务中,如果每个服务都单独管理自己的配置项,会导致管理复杂性增加。配置中心通过集中管理配置项,极大简化了运维工作。
  2. 环境隔离,配置灵活 不同的环境(开发、测试、生产等)通常需要不同的配置项。配置中心支持按环境隔离配置项,使得相同的微服务在不同环境中可以方便地获取对应的配置,而无需手动修改配置文件。
  3. 动态更新,实时生效 在业务需求变化较快的场景中,配置项的频繁修改是常态。配置中心支持配置项的动态更新和实时生效,减少了服务重启的次数,提高了系统的可用性和灵活性。
  4. 安全管理 某些敏感配置项如数据库密码、API 密钥等)不适合写在代码中或本地文件中。配置中心提供了安全的存储和访问机制,确保敏感信息的安全性。
  5. 统一监控,提升稳定性 配置中心可以对所有配置项进行统一监控和管理,方便运维人员及时发现和处理配置问题,提升系统的稳定性和可靠性。

本地配置演示

在单体项目开发中,配置项通常都会写死在 application.yml 文件中。比如说,我们需要对接口的进行限流控制,同时呢,要求阈值是能够手动配置的,那么,你可能会在 application.yml 文件中,自定义如下配置项:

代码如下:

rate-limit:
  api:
    limit: 100 # 接口限流阈值

获取配置

为了方便查看配置项的值,在 /controller 包下,创建一个 TestController 测试控制器,代码如下:

package com.quanxiaoha.xiaohashu.auth.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class TestController {

    @Value("${rate-limit.api.limit}")
    private Integer limit;

    @GetMapping("/test")
    public String test() {
        return "当前限流阈值为: " + limit;
    }

}
  • 通过 @Value("${rate-limit.api.limit}") 获取配置文件的限流阈值;
  • 并定义一个 GET 请求的 /test 接口,用于打印 limit 阈值;

重启项目,浏览器访问该接口,可以看到成功打印出了配置文件中限流阈值 100

使用 Nacos 配置中心

接下来,让我们来实际感受一下 Nacos 配置中心的魅力。

进入 Nacos 管理后台,创建配置

浏览器访问: http://localhost:8848/nacos 进入到 Nacos 控制台,如下图所示,点击创建配置按钮:

填写相关配置项:

  • ①:Data Id : 配置的唯一标识,这里我们填写 xiaohashu-auth
  • ②:Group: 所属组,这里默认组即可;
  • ③:配置格式:咱们项目中使用的 YAML 格式配置, 这里也选择 YAML;
  • ④:配置内容,将限流阈值配置复制进去;
  • ⑤:点击发布按钮;

添加依赖

然后,编辑项目的最外层 pom.xml , 添加 Nacos 配置需要使用的依赖:

    // 省略...
    
    <properties>
        // 省略...
        
        <nacos-config.version>0.3.0-RC</nacos-config.version>
    </properties>

    <!-- 统一依赖管理 -->
    <dependencyManagement>
            // 省略...

            <!-- Nacos 配置中心 -->
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>nacos-config-spring-boot-starter</artifactId>
                <version>${nacos-config.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    // 省略...

注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。我们是 Spring Boot 3.x, 故使用最新的 0.3.x 版本。

接着,编辑 xiaohashu-auth 认证服务的 pom.xml 文件,引入该依赖,代码如下:

        <!-- Nacos 配置中心 -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
        </dependency>

依赖引入完毕后,刷新一个 Maven 将依赖包下载到本地 Maven 仓库中。

项目配置 Nacos

依赖添加完毕后,编辑 applicaiton.yml 文件,准备添加 Nacos 相关配置,因为认证服务需要与 Nacos 配置中心进行通信:

配置项如下:

nacos: 
  config: # Nacos 配置中心
    access-key: # 身份验证
    secret-key: # 身份验证
    data-id: xiaohashu-auth # 指定要加载的配置数据的 Data Id
    group: DEFAULT_GROUP # 指定配置数据所属的组
    type: yaml # 指定配置数据的格式
    server-addr: http://127.0.0.1:8848/ # 指定 Nacos 配置中心的服务器地址
    auto-refresh: true # 是否自动刷新配置
    remote-first: true # 是否优先使用远程配置
    bootstrap:
      enable: true # 启动时,预热配置

Tip

: 由于本地 Nacos 环境没有设置必须登录才能使用,所以这里身份验证相关配置填空即可。

使用 @NacosValue 注解

编辑 TestController 控制器,将之前的 Spring 框架提供的 @Value 注解,替换为 Nacos 的 @NacosValue 注解, 代码如下:

package com.quanxiaoha.xiaohashu.auth.controller;

import com.alibaba.nacos.api.config.annotation.NacosValue;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class TestController {

    @NacosValue(value = "${rate-limit.api.limit}", autoRefreshed = true)
    private Integer limit;

	// 省略...

}

解释一下:

  • @NacosValue 这是 Nacos 提供的一个注解,用于从 Nacos 配置中心中获取配置项,并将其注入到字段中。

  • value 这是注解的一个参数,用于指定要获取的配置项的键。这里使用了占位符 ${rate-limit.api.limit},表示要从 Nacos 配置中心中获取键为 rate-limit.api.limit 的配置项。

  • autoRefreshed 这是注解的另一个参数,用于指定是否自动刷新配置项。当配置中心中的配置项发生变化时,如果 autoRefreshed 设置为 true,则该字段的值会自动更新,保持与配置中心中的最新值一致。

重启项目

代码编写完毕后,记得重启项目,开始测试 Nacos 配置是否好使。

Nacos 管理后台动态修改配置

进入到 Nacos 管理后台中,点击编辑按钮,将限流阈值修改为 888

点击发布按钮:

发布成功后,查看控制台日志,你会发现认证服务已经实时感知到了配置的变化,并将具体的配置信息以日志的方式,打印了出来,如下图所示:

再次浏览器访问 /test 接口,可以看到限流阈值已经变成了最新修改的 888,实现了配置的动态刷新:

通过本小节内容,相信小伙伴们对于 Nacos 做为配置中心的能力,已经亲身感受了一波,有木有非常强大

本小节源码下载

https://t.zsxq.com/ExYki