1什么是配置中心
在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,不仅如此,分散中还包含着冗余,如下图:
2为什么要使用配置中心
配置中心将配置从各应用中剥离出来,对配置进行统一管理,应用自身不需要自己去管理配置。
Nacos是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
3 下载部署
见nacos 注册中心篇
4 实战
4.1 引入 pom
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
4.2 bootstrap.yml 配置
spring:
application:
# 应用名称
name: mycloud-nacos
profiles:
# 环境配置
active: pro
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: xxxx:8848
config:
# 配置中心地址 默认按照application-name去匹配配置文件
server-addr: xxxx:8848
# 配置文件格式
file-extension: yaml
配置中心地址 默认按照application-name去匹配配置文件,默认读properties后缀。
4.3 nacos 平台新增配置文件
namespace:名称空间用于隔离不同租户的配置。组和数据 id 可以在不同的名称空间中相同。名称空间的典型场景是不同环境的配置隔离,例如,开发/测试环境和生产环境(配置和服务等)之间的隔离。
Group:默认情况下,当没有定义{ spring.cloud.nacos.config.group }配置时,使用 DEFAULT _ group。如果您需要定义自己的组,可以在以下属性中定义它:
spring.cloud.nacos.config.group=DEVELOP_GROUP
这个配置必须在 bootstrap.properties 文件中,Group 的值必须与 spring.cloud.nacos.config.Group 的值相同。
Data ID: 默认为
a
p
p
l
i
c
a
t
i
o
n
.
n
a
m
e
?
{application.name}-
application.name?{spring.profiles.active}.properties 其中spring.profiles.active 是根据服务application配置文件制定的环境自动适配的 Data ID 默认采用properties后缀我们可以通过 spring.cloud.nacos.config.file-extension: yaml 来让它读取yaml 后缀。
3) 配置mycloud-nacos.yaml
配置mycloud-nacos-dev.yaml
配置 mycloud-nacos-pro.yaml
4.4 读取nacos 多环境配置
1) 在nacos 上新增配置文件
@RestController
@RequestMapping("/nacos")
@RefreshScope
@Slf4j
public class TestController {
@Value("${age}")
private Integer age;
@Value("${id}")
private Integer id;
@RequestMapping("/testConfig")
public void testConfig(){
log.info("-------age:{}-----",age);
log.info("-------id:{}-----",id);
log.info("-------name:{}", SpringUtil.getEnvironmentProperty("name"));
}
}
@RefreshScope 是nacos 开启配置自动刷新的注解,开启后nacos中配置跟新,服务会拉取最新配置进行更新。
- 当 spring.profiles.active: pro 时
可见当指定环境时 mycloud-nacos-pro.yaml ,mycloud-nacos.yaml 配置都会被读取且前者中的相同配置会覆盖后者,完全符合springboot中多环境配置文件规则。
- 当 spring.profiles.active: dev 时
age 变成了 880 说明nacos的配置会跟着spring.profiles.active 变化。
4.5读取 nacos 共享配置
1)bootstrap.yaml:
server:
port: 7001
# Spring
spring:
application:
# 应用名称
name: mycloud-nacos
profiles:
# 环境配置
active: pro
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: xxxx:8848
config:
# 配置中心地址 默认按照application-name去匹配配置文件
server-addr: xxxx:8848
# 配置文件格式
file-extension: yaml
# 共享配置
shared-configs: common-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
- nacos上新增配置文件 common-dev.yaml
3)设置spring.profiles.active: dev
4)结果
address 已经能够读到,但是我们发现id 并不是common-dev.yaml 中设置的8600 而是mycloud-nacos.yaml 中设置的 1 ,这说明共享配置的优先级比较低。
|