返回

探索Nacos的高效服务配置:便捷配置管理的利器

后端

Nacos 服务配置中心:微服务配置管理利器

Nacos 简介

Nacos 是一个开源的微服务配置管理工具,由阿里巴巴集团开发。它将服务发现、配置管理和服务治理整合在一起,为微服务架构提供了强大的支撑。在服务配置管理方面,Nacos 具有如下核心功能:

  • 统一配置管理: 提供一个集中式的平台,管理不同环境、应用和服务的配置信息,支持多种格式的配置数据,如 JSON、YAML、XML 等。
  • 动态推送: 当配置发生变更时,Nacos 能够实时将配置信息推送给所有订阅的服务实例,确保服务的及时更新。
  • 变更控制: 提供细粒度的配置变更控制,支持配置的版本管理、审计和回滚,确保配置变更的可控性和安全性。

Nacos 的使用

添加依赖

在 Maven 项目中添加 Nacos 依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

配置 application.yaml

在 application.yaml 文件中配置 Nacos 的连接信息:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

配置 bootstrap.yaml

在 bootstrap.yaml 文件中配置 Nacos 的配置中心地址:

spring:
  application:
    name: demo-app
  cloud:
    nacos:
      config:
        server-addr: localhost:8848

平台创建配置规则

在 Nacos 控制台创建配置规则:

  • 命名空间:选择或创建要使用的命名空间
  • 分组:选择或创建要使用的分组
  • 数据 ID:填写配置数据的 ID
  • 配置内容:填写配置数据的具体内容

业务层编写

在业务层代码中,使用 @Value 注解获取配置信息:

@Value("${nacos.config}")
private String nacosConfig;

访问获取配置内容

通过访问配置的 URL 即可获取配置内容:

http://localhost:8848/nacos/v1/cs/configs?dataId=demo-app&group=DEFAULT_GROUP

Nacos 动态刷新(@RefreshScope 注解)

使用 @RefreshScope 注解可以实现配置的动态刷新:

@RefreshScope
public class ConfigController {

    @Value("${nacos.config}")
    private String nacosConfig;

    @GetMapping("/config")
    public String getConfig() {
        return nacosConfig;
    }
}

切换不同环境

Nacos 提供了三种切换不同环境配置的方式:

DataId 方案

通过在配置中增加 DataId 后缀的方式来实现不同环境的配置隔离。例如:

  • 开发环境:dataId=config
  • 测试环境:dataId=config-test
  • 生产环境:dataId=config-prod

Group 方案

通过在配置中增加 Group 的方式来实现不同环境的配置隔离。例如:

  • 开发环境:group=dev
  • 测试环境:group=test
  • 生产环境:group=prod

Namespace 空间方案

通过在配置中增加 Namespace 的方式来实现不同环境的配置隔离。例如:

  • 开发环境:namespace=dev
  • 测试环境:namespace=test
  • 生产环境:namespace=prod

Nacos 持久化配置

默认情况下,Nacos 使用嵌入式 Derby 数据库进行持久化存储。也可以通过配置切换到 MySQL 数据库。

切换 MySQL 数据库

  1. 创建数据库:
CREATE DATABASE nacos DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  1. 在数据库中创建 Nacos 所需的表结构:
-- 表: config_info
CREATE TABLE `config_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `data_id` varchar(255) NOT NULL,
  `group_id` varchar(255) DEFAULT NULL,
  `tenant_id` varchar(255) DEFAULT NULL,
  `app_name` varchar(255) DEFAULT NULL,
  `content` longtext,
  `md5` varchar(255) DEFAULT NULL,
  `gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `config_data_id_group_tenant_unique` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- 表: server_config
CREATE TABLE `server_config` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `data_id` varchar(255) NOT NULL,
  `group_id` varchar(255) DEFAULT NULL,
  `tenant_id` varchar(255) DEFAULT NULL,
  `content` longtext,
  `md5` varchar(255) DEFAULT NULL,
  `gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `config_data_id_group_tenant_unique` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- 表: schema_info
CREATE TABLE `schema_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `tenant_id` varchar(255) DEFAULT NULL,
  `schema_id` varchar(255) DEFAULT NULL,
  `content` longtext,
  `md5` varchar(255) DEFAULT NULL,
  `gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `schema_tenant_id_schema_id_unique` (`tenant_id`,`schema_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
  1. 修改 Nacos 的配置文件:
db.url=jdbc:mysql://localhost:3306/nacos
db.user=root
db.password=root

常见问题解答

  1. 如何实现配置的动态刷新?

    • 使用 @RefreshScope 注解可以实现配置的动态刷新。
  2. 如何切换不同的环境配置?

    • 可以使用 DataId、Group 或 Namespace 方案来切换不同环境配置。
  3. 如何持久化配置信息?

    • Nacos 默认使用 Derby 数据库,也可以切换到 MySQL 数据库。
  4. Nacos 是否支持多数据中心部署?

    • 是的,Nacos 支持多数据中心部署。
  5. Nacos 如何解决配置中心故障问题?

    • Nacos 通过集群部署和选举机制来解决配置中心故障问题。