Nacos配置管理——统一配置管理
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nacos配置管理——统一配置管理相关的知识,希望对你有一定的参考价值。
文章目录
0. 问题引言
之前的微服务架构:
但是随着业务的增多,我们可能需要部署数十个甚至百个微服务,但是这样就有了一个问题,如果现在要增加一个业务或者修改一个业务,对于这个业务需要修改多个微服务的配置文件,如果要修改的配置文件是几个还好,但是如果是很多的话,这无疑增加了我们的工作量。而且修改了配置之后,我们还需要重启各个微服务,不能进行配置更改的热更新…
这时候就要用到一个配置管理服务来管理这些微服务经常变更的配置或者核心的配置,当配置要进行修改时,直接改配置中心的配置给微服务去读取在于自身的配置相结合就好了,整体结构如下图所示:
这里就体现出来Nacos的功能强大了,他在配置管理上:一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。
1. Nacos配置管理
Nacos不光可以作为注册中心、也能当配置中心使用。
结构架构图如下所示:
那么我们如何在nacos中添加配置文件呢?下面我们一起来探索一下:
1.1.统一配置管理
当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。
Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。
结构流程图如下:
1.1.1.在nacos中添加配置文件
点击配置列表,点击右侧加号
再添加配置页面可以设置配置项的各个信息,例如:
点击添加,此时我们就多了一个配置:
注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。
1.1.2.从微服务拉取配置
微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。
但又有一个问题了:如果尚未读取application.yml,又如何得知nacos地址呢?
因此spring引入了一种新的配置文件:bootstrap.yaml文件
,会在application.yml之前被读取,流程如下:
1.1.3.从微服务拉取配置步骤:
1)引入nacos-config依赖
首先,在user-service服务中,引入nacos-config的客户端依赖:
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2)添加bootstrap.yaml
然后,在user-service中添加一个bootstrap.yaml文件,内容如下:
spring:
application:
name: userservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
这里会根据spring.cloud.nacos.server-addr获取nacos地址,再根据
$spring.application.name-$spring.profiles.active.$spring.cloud.nacos.config.file-extension
作为文件id,来读取配置。
这里的文件名是:userservice-dev.yaml
,也就是我们刚才在配置中心添加的那个配置
3)读取nacos配置
在user-service中的UserController中添加业务逻辑,读取pattern.dateformat配置:
完整代码:
package com.yyl.user.web;
import com.yyl.user.pojo.User;
import com.yyl.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController
@Autowired
private UserService userService;
@Value("$pattern.dateformat")
private String dateformat;
/**
* 路径: /user/110
* @param id 用户id
* @return 用户
*/
@GetMapping("/id")
public User queryById(@PathVariable("id") Long id)
return userService.queryById(id);
@GetMapping("now")
public String now()
// 获取当前时间并格式化
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
进行请求访问,可以看到效果:
完美!
以上是关于Nacos配置管理——统一配置管理的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud Nacos配置管理 -- 统一配置管理(添加配置微服务配置拉取)