【微服务】六. Nacos配置管理

6.1 Nacos实现配置管理

配置更改热更新

在nacos左侧新建配置管理

Data ID:就是配置文件名称 一般命名规则:服务名称-环境名称.yaml

配置内容填写:需要热更新需求的配置

配置文件的id:[服务名称]-[profile].[后缀名]

分组,默认即可

格式,目前支持yaml和properties

6.2 微服务配置拉取

配置获取的步骤如下:

服务启动会先读取bootstrap.yml文件的内容,将有关nacos地址的内容写在bootstrap文件中。

1.引入Nacos的配置管理客户端依赖:

xml 复制代码
<!--nacos配置管理依赖-->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.在userservice中的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml

yml 复制代码
spring:
	application:
		name: userservice  # 服务名称
	profiles:
		active: dev  # 开发环境,这里是dev
	cloud:
		nacos:
			server-addr: localhost:8848  # Nacos地址
			config:
				file-extension: yaml  # 文件后缀名

如何证明拉取到了配置呢?

微服务获取nacos中的配置信息

读取nacos配置内容

我们在user-service中将pattern.dateformat这个属性注入到UserController中做测试

java 复制代码
@RestController
@RequestMapping("/user")
public class UserController {
    // 注入nacos中的配置属性
    @Value("${pattern.dateformat}")
    private String dateformat;
    
    // 编写controller,通过日期格式化器来格式化现在时间并返回
    @GetMapping("now")
    public String now(){
        return LocalDate.now().format(DateTimeFormatter.ofPattern(dateformat, Local.CHINA));
    }
}

总结

将配置交给Nacos管理的步骤:

在Nacos中添加配置文件

在微服务中引入nacos的config依赖

在微服务中添加bootstrap.yml,配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个文件。

6.3 配置热更新

配置自动刷新

Nacos中的配置文件变更后,微服务无需重启就可以感知。不过需要通过下面两种配置实现:

方式一:在@Value注入的变量所在类上添加注解@RefreshScope

java 复制代码
@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController{
    @Value("${pattern.dateformat}")
    private String dateformat;
}

方式二:使用@ConfigurationProperties注解

java 复制代码
@Component
@Data
@ConfigurationProperties(predix = "pattern")
public class PatternProperties{
    private String dateformat;
}

总结:

Naocs配置更改后,微服务可以实现热更新,方式:

通过@Value注解注入,结合@RefreshScope来刷新

通过@ConfigurationProperties注入,自动刷新

注意事项:

不是所有的配置都适合放到配置中心,维护起来比较麻烦。

建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置。

6.4 多环境配置共享

微服务启动时会从nacos读取多个配置文件:

  • spring.application.name\]-\[spring.profiles.active\].yaml,例如:userservice-dev.yaml

无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件。

多种配置的优先级:

服务名-profile.yaml > 服务名称.yaml > 本地配置

总结

微服务会从nacos读取的配置文件:

  • 服务名\]-\[spring.profile.active\].yaml,环境配置

优先级:

服务名\]-\[环境\].yaml \> \[服务名\].yaml \> 本地配置 # 6.5 nacos集群搭建 Nacos生产环境下一定要部署为集群状态 ## 6.5.1 集群结构图 我们计划的集群结构 ![nacos集群搭建](https://file.jishuzhan.net/article/1702834817604784130/5a07f80f831e4440b7621034fd2fb6f4.png) ## 6.5.2 搭建集群 搭建集群的基本步骤: * 搭建数据库,初始化数据库表结构 * 下载nacos安装包 * 配置nacos * 启动nacos集群 * nginx反向代理 ### 6.5.2.1 初始化数据库 Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。 官方推荐的最佳实践是使用带有主从的高可用数据库集群,主从模式的高可用数据库参考后续课程。 这里以单点的数据库为例讲解 ### 6.5.2.2 下载nacos ### 6.5.2.3 配置nacos 解压nacos安装包以后, 目录说明: * bin:启动脚本 * conf:配置文件 进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf。然后添加内容: ```conf # 添加内容为nacos集群分别的安装IP和端口 例如 192.168.16.101:8845 192.168.16.101:8846 192.168.16.101:8847 ``` 然后修改application.properties文件,添加数据库配置 ```properties spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=root db.password.0=123 ``` ### 6.5.2.4 启动 将nacos文件复制三份,分别命名为:nacos1、nacos2、nacos3 然后分别修改三个文件夹中的application.properties, nacos1: ```properties server.port=8845 ``` nacos2: ```properties server.port=8846 ``` nacos3: ```properties server.port=8847 ``` ### 6.5.2.5 nginx反向代理 安装解压nginx 修改conf/nginx.conf文件,配置如下: ```nginx upstream nacos-cluster { server 127.0.0.1:8845; server 127.0.0.1:8846; server 127.0.0.1:8847; } server { listen 80; server_name localhost; location /nacos { # nacos默认路径 proxy_pass http://nacos-cluster; } } ``` 对于nacos的操作和之前一样,新增完配置之后,会在数据库的conf.info表中新增一条配置信息,做了数据持久化 ## 总结: 集群搭建步骤: * 搭建MySQL集群并初始化数据库表 * 下载解压nacos * 修改集群配置(节点信息)、数据库配置 * 分别启动多个nacos节点 * nginx反向代理

相关推荐
island131441 分钟前
CANN ops-nn 算子库深度解析:神经网络计算引擎的底层架构、硬件映射与融合优化机制
人工智能·神经网络·架构
C澒43 分钟前
前端整洁架构(Clean Architecture)实战解析:从理论到 Todo 项目落地
前端·架构·系统架构·前端框架
roman_日积跬步-终至千里1 小时前
【架构实战-Spring】动态数据源切换方案
架构
C澒1 小时前
Remesh 框架详解:基于 CQRS 的前端领域驱动设计方案
前端·架构·前端框架·状态模式
晚霞的不甘1 小时前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
C澒1 小时前
前端分层架构实战:DDD 与 Clean Architecture 在大型业务系统中的落地路径与项目实践
前端·架构·系统架构·前端框架
Re.不晚2 小时前
MySQL进阶之战——索引、事务与锁、高可用架构的三重奏
数据库·mysql·架构
松☆2 小时前
深入理解CANN:面向AI加速的异构计算架构
人工智能·架构
麦聪聊数据2 小时前
为何通用堡垒机无法在数据库运维中实现精准风控?
数据库·sql·安全·低代码·架构
2的n次方_2 小时前
CANN Ascend C 编程语言深度解析:异构并行架构、显式存储层级与指令级精细化控制机制
c语言·开发语言·架构