微服务配置隔离
# 简介
nacos不仅仅可以作为注册中心,也可以作为配置中心,所以我们的本地的配置完全可以配置到nacos上,让服务到注册中心读取配置信息,然后启动应用。

# 基础配置步骤
笔者本地有一个名为account-service的应用,我们希望从注册中心获取配置。第一步我们先引入配置中心的依赖。
<!--配置中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2
3
4
5
6
7
然后我们的在其resource文件夹下创建bootstrap.yml,指明配置中心地址,如下所示,可以看到笔者指定的nacos注册中心的地址server-addr,以及指定配置文件格式为yml
spring:
application:
name: account-service
cloud:
nacos:
config:
server-addr: ip:8848
file-extension: yml
2
3
4
5
6
7
8
9
10
完成后我们到nacos进行配置,由上配置我们可知服务的名称为account-service,文件格式为yml,所以我们到注册中心配置一个data-id为account-service.yml的配置,如下图所示

完成后我们正常启动应用查看服务是否正常启动,若控制台输出如下所示Loading nacos data, dataId: 'account-service.yml', group: 'DEFAULT_GROUP',则说明确实尝试去加载nacos配置了
2023-01-30 09:38:36,121 INFO NacosPropertySourceBuilder:87 - Loading nacos data, dataId: 'account-service.yml', group: 'DEFAULT_GROUP'
2023-01-30 09:38:36,124 INFO PropertySourceBootstrapConfiguration:101 - Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='account-service.yml'}]}
2023-01-30 09:38:36,127 INFO AccountServiceApplication:648 - No active profile set, falling back to default profiles: default
2023-01-30 09:38:36,509 INFO GenericScope:295 - BeanFactory id=4643520b-070a-37ed-8bdc-56e866f9ee23
2023-01-30 09:38:36,562 INFO PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation
2
3
4
5
然后对接口进行测试可用性,如下图所示,若由响应结果则说明服务正常启动没有问题。

# 基于profiles实现多环境管理
我们开发时候可能会存在开发环境配置和生产环境配置,所以我们可以对应用的profiles切换完成配置切换,如下所示,这就是一条profiles的active为DEV的环境配置。如果我们希望走测试配置,则将active后面改为TEST,然后到注册中心配置TEST的配置即可。
spring:
application:
name: account-service
cloud:
nacos:
config:
server-addr: ip:8848
file-extension: yml
profiles:
active: DEV
2
3
4
5
6
7
8
9
10
11
完成后我们到配置注册编写这条配置,配置的data-id为应用名称.profiles.文件后缀,以笔者为例,笔者的应用名称为account-service,profiles.active配置为DEV,文件后缀(file-extension)为yml,所以我们在注册中心的配置为account-service.DEV.yml,如下图:

完成后启动本地应用,若控制台输出下面这段配置则说明成功尝试到nacos获取这些配置,一旦项目启动成功并接口调试无误则说明配置生效。
2023-01-30 09:54:13,486 INFO NacosPropertySourceBuilder:87 - Loading nacos data, dataId: 'account-service.yml', group: 'DEFAULT_GROUP'
2023-01-30 09:54:13,706 INFO PropertySourceBootstrapConfiguration:101 - Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='account-service-DEV.yml'}, NacosPropertySource {name='account-service.yml'}]}
2023-01-30 09:54:13,709 INFO AccountServiceApplication:652 - The following profiles are active: DEV
2
3
# 基于group隔离
有时候我们的有多个应用希望用同一个组的配置,例如笔者有account-service、order-service两个应用,希望能够配置使得应用可以在不同配置组中切换如下图所示

那么我们的配置就如下所示,指定group,到nacos上配置应用名称. file-extension然后指定group为DEV_GROUP
spring:
application:
name: account-service
cloud:
nacos:
config:
server-addr: ip:8848
file-extension: yml
group: DEV_GROUP
2
3
4
5
6
7
8
9
10
11
可以看到我们的nacos的配置如下图所示

启动后输出下面这段则说明并启动成功则说明配置生效:
2023-01-30 09:56:14,067 INFO NacosPropertySourceBuilder:87 - Loading nacos data, dataId: 'account-service.yml', group: 'DEV_GROUP'
2023-01-30 09:56:14,070 INFO PropertySourceBootstrapConfiguration:101 - Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='account-service.yml'}]}
2023-01-30 09:56:14,072 INFO AccountServiceApplication:648 - No active profile set, falling back to default profiles: default
2
3
# 基于namespace进行配置隔离(常用)
Namespace 是 nacos 做多环境以及多租户数据(配置和服务)隔离的,目前也是官方推荐的多环境支持方案。如果你的微服务有多套不同的环境(DEV,TEST),那么这个时候可以根据指定的环境来创建不同的 namespce,以此来实现多环境的隔离。不同的命名空间下可以有相同的Group 和Data ID。
以笔者为例,点击新建命名空间创建一个DEV的命名空间,得到命名空间id为63f0dbe6-ac91-4a2e-a88e-82b76f8187b6

所以我们的在服务的bootstrap.yml中配置namespace信息,如下所示
spring:
application:
name: account-service
cloud:
nacos:
config:
server-addr: ip:8848
file-extension: yml
namespace: 63f0dbe6-ac91-4a2e-a88e-82b76f8187b6
2
3
4
5
6
7
8
9
10
11
然后到注册中心的DEV这个命名空间创建account-service.yml配置

完成后查看服务是否读取到配置并且能正常运行即可