返回 Nacos 动态刷新(
探索Nacos的高效服务配置:便捷配置管理的利器
后端
2023-11-10 02:55:22
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 数据库
- 创建数据库:
CREATE DATABASE nacos DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- 在数据库中创建 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;
- 修改 Nacos 的配置文件:
db.url=jdbc:mysql://localhost:3306/nacos
db.user=root
db.password=root
常见问题解答
-
如何实现配置的动态刷新?
- 使用
@RefreshScope
注解可以实现配置的动态刷新。
- 使用
-
如何切换不同的环境配置?
- 可以使用 DataId、Group 或 Namespace 方案来切换不同环境配置。
-
如何持久化配置信息?
- Nacos 默认使用 Derby 数据库,也可以切换到 MySQL 数据库。
-
Nacos 是否支持多数据中心部署?
- 是的,Nacos 支持多数据中心部署。
-
Nacos 如何解决配置中心故障问题?
- Nacos 通过集群部署和选举机制来解决配置中心故障问题。