导读:本篇作为SpringCloud Alibaba微服务实战系列的第六篇,主要内容是将所有的微服务接入Nacos配置中心并按环境进行隔离。系列文章,欢迎持续关注。
在SpringCloud Alibaba体系中是使用Nacos作为配置中心,这样Nacos既可以作为注册中心也可以作为配置中心,相当于SpringCloud中的Eureka + Config。要接入Nacos的配置中心也很简单,只需要如下几步:
spring-cloud-starter-alibaba-nacos-config <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>复制代码
bootstrap.yml ,配置应用名称和注册中心地址 spring:
application:
name: account-service
cloud:
nacos:
config:
server-addr: 10.0.10.48:8848
file-extension: yml复制代码
这里指定文件后缀为yml
注:在客户端和server端对文件格式的声明要一致,例如在客户端声明的是yml,则server端添加配置文应该是 ${spring.application.name}.yml ,若写成 ${spring.application.name}.yaml ,则会找不到配置文件。 如在我们的 account-service 中应该建立一个 account-service.yml 文件,然后把原 application.yml 的内容复制到里面即可,在nacos配置中可以删除 spring.application.name 配置。
运行测试
测试服务功能是否正常
简单几步就可以将你的微服务集成 Nacos 的配置中心了,但是在实际开发中我们需要准备多个环境的配置文件(开发、测试、生产),接下来我们看看如何使用 Nacos 进行多环境配置管理。
在Nacos中实现多环境管理很容易,可以通过 Profiles , Group , Namespace 三个维度实现。
nacos配置中心的DATA ID就相当于一个配置文件的名称,前面一部分我们DATA ID的默认命名方式为`${spring.application.name}.${spring.cloud.nacos.config.file-extension} ,比如我们之前的配置文件为 account-service.yml`。
如果我们在服务启动的时候指定了服务的环境名称 spring.profiles.active ,那么DATA ID的命名方式就变成了 ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} 。比如上面的 account-service 我们在 bootstrap.yml 中设置了 spring.profiles.active=DEV ,那么服务启动时就会去nacos抓取 account-service-DEV.yml 这个配置文件的数据。
利用 Nacos 命名方式的特性我们可以实现多环境配置管理。
spring:
profiles:
active: DEV复制代码
Nacos 中建立多套环境的配置
2019-12-13 13:39:21,352 INFO NacosPropertySourceBuilder:87 - Loading nacos data, dataId: 'account-service-DEV.yml', group: 'DEFAULT_GROUP'
2019-12-13 13:39:21,363 INFO PropertySourceBootstrapConfiguration:101 - Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='account-service-DEV.yml'}, NacosPropertySource {name='account-service.yml'}]}
2019-12-13 13:39:21,376 INFO AccountServiceApplication:652 - The following profiles are active: DEV复制代码
Group 是DATA ID集合的概念,将同一个环境下的配置文件组成一个Group,在服务启动时通过指定 spring.cloud.nacos.config.group 属性可以让系统加载不同Group的配置文件。
Group 进行区分
如上所示,我们建立了一个DEV GROUP 和TEST GROUP。 spring.cloud.nacos.config.group 的值 spring:
cloud:
nacos:
config:
server-addr: 10.0.10.48:8848
file-extension: yml
group: DEV_GROUP复制代码
这个时候不需要再给服务指定 spring.profiles.active 属性
2019-12-13 14:19:19,861 INFO NacosPropertySourceBuilder:87 - Loading nacos data, dataId: 'account-service.yml', group: 'DEV_GROUP'
2019-12-13 14:19:19,869 INFO PropertySourceBootstrapConfiguration:101 - Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='account-service.yml'}]}
2019-12-13 14:19:19,882 INFO AccountServiceApplication:648 - No active profile set, falling back to default profiles: default复制代码
Namespace 是 nacos 做多环境以及多租户数据(配置和服务)隔离的,目前也是官方推荐的多环境支持方案。如果你的微服务有多套不同的环境(DEV,TEST),那么这个时候可以根据指定的环境来创建不同的 namespce,以此来实现多环境的隔离。不同的命名空间下可以有相同的 Group 和 Data ID 。
Nacos 中根据项目环境建立多套 Namespace
建好Namespace后会生产一串命名空间ID,在应用里通指定 spring.cloud.nacos.config.namespace 属性对应不同的Namespace
spring.cloud.nacos.config.namespace 属性 spring:
cloud:
nacos:
config:
server-addr: 10.0.10.48:8848
file-extension: yml
namespace: 7e8ccc22-6f51-42fa-bcf1-db45f99dbf57复制代码
启动应用,观察后端启动日志
这个版本没有关于 Namespace 的启动日志,不过你可以修改你的配置确认是否正常加载,反正我这里是正常的O(∩_∩)O哈哈~
Namespace 作为官方推荐的环境隔离配置,我们将所有的微服务全部按照此方式进行改造,改造完的效果如下:
改造完成后要对服务进行测试,保证服务能正常运行。
至此我们已经把我们微服务的配置全部放入了配置中心,并且使用Namespace对环境进行了隔离。那么本期的“SpringCloud Alibaba微服务实战六 - 配置隔离”篇也就该结束啦,咱们下期有缘再见!
再见之前让我在求一波关注吧,O(∩_∩)O哈哈~!