所有代码都在github上:https://github.com/demonruin/cloud2020/tree/master
所有的资料都来源官网,首先先打开Spring的官网https://spring.io,然后进入Projects分类,进入SpringCloud的官网https://spring.io/projects/spring-cloud,再点击Spring Cloud Alibaba,选择learn,选择版本进入Reference Doc. 然后选择Spring Cloud Alibaba Nacos Config.
Nacos部分详情参见官网 文档 https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
在多环境多项目的情况下,就需要对配置文件进行分类管理了。而nacos提供了Namespace+Group+Data ID分类
Namespace+Group+Data ID三者关系?为什么这么设计?
1、是什么
类似Java里面的package名和类名
最外层的namespace是可以用于区分部署环境的, Group和DatalD逻辑上区分两个目标对象。
2、三者情况
默认情况:
Namespace=public, Group=DEFAULT_ GROUP,默认Cluster是DEFAULT
Nacos默认的命名空间是public,Namespace主要用来实现隔离。
比方说我们现在有三个环境:开发、测试、铲环境,我们就可以创建三E个Namespace,不同的Namespace之间是隔离的。Group默认是DEFAULT_ GROUP, Group可以把不同的微服务划分到同一个分组里面去
Service就是微服务;一个Service可以包含多个Cluster (集群),Nacos默认Cluster是 DEFAULT, Cluster是 对指定微服务的一个虚拟划分。比方说为了容灾,将Service微服务分别部署在了北京机房和广州机房,这时就可以给北京机房的Service微服务起一个集群名称(BJ) ,给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
最后是Instance,就是微服务的实例。
下面分别对分类配置进行演示~
DATA ID分类配置:
1、基于上篇文章的dev配置文件,这里再新建一个nacos-config-client-test.yaml配置
2、修改项目中applicaiton.yml中的配置spring.profile.active:test
spring:
profiles:
# active: dev #表示激活开发环境
active: test #表示激活测试环境
3、通过接口测试,查看configInfo的值是否已经修改
Group分类配置:
1、基于上篇文章的dev配置文件,这里再新建一个nacos-config-client-dev.yaml配置,但是分组填写DEV_GROUP
2、在bootstrap.yml文件中添加分组配置 group属性
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos服务配置中心地址
file-extension: yaml #指定yaml格式的配置,此处注意只有yaml和properties两种格式,需要注意
group: DEV_GROUP
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml
# nacos-config-client-test.yaml ----> config.info
将application.yml中的激活配置重新修改为dev激活状态
spring:
profiles:
active: dev #表示激活开发环境
# active: test #表示激活测试环境
3、请求接口测试结果~
Namespace分类配置:
1、新建命名空间dev/test,有一个public保留空间,是不能删除的,新建的命名空间id可填不可填,不填的话会默认生成一个流水号
2、通过配置管理的配置列表可以查看新建好的命名空间,点击可以切换
3、在dev模式下新建配置
4、修改bootstrap.yml文件,添加命名空间配置namespace,值为Nacos面板中创建命名空间是生成的流水号id
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos服务配置中心地址
file-extension: yaml #指定yaml格式的配置,此处注意只有yaml和properties两种格式,需要注意
group: DEV_GROUP
namespace: c55b0aab-105e-4e4b-ad43-f528c45a1242 #填那个命名空间的流水号就是那个命名空间
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml
# nacos-config-client-test.yaml ----> config.info
保留application.yml中的激活配置
spring:
profiles:
active: dev #表示激活开发环境
# active: test #表示激活测试环境
5、通过测试接口来判断是否配置成功
如果想换成test的命名空间,按照上述步骤在test命名空间中创建配置,然后修改bootstrap中的namespace为test的流水号,然后application.yml中的配置设置为test激活,即可进行配置切换
************************************************************************************************************************************************
Nacos还支持读取除指定的配置文件外,还可以读取共享配置,即可以从配置中心中读取多个配置文件
支持自定义扩展的 Data Id 配置
Spring Cloud Alibaba Nacos Config 从 0.2.1 版本后,可支持自定义 Data Id 的配置。关于这部分详细的设计可参考 这里。 一个完整的配置案例如下所示:
spring.application.name=opensource-service-provider spring.cloud.nacos.config.server-addr=127.0.0.1:8848 # config external configuration # 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新 spring.cloud.nacos.config.extension-configs[0].data-id=ext-config-common01.properties # 2、Data Id 不在默认的组,不支持动态刷新 spring.cloud.nacos.config.extension-configs[1].data-id=ext-config-common02.properties spring.cloud.nacos.config.extension-configs[1].group=GLOBALE_GROUP # 3、Data Id 既不在默认的组,也支持动态刷新 spring.cloud.nacos.config.extension-configs[2].data-id=ext-config-common03.properties spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP spring.cloud.nacos.config.extension-configs[2].refresh=true
可以看到:
-
通过
spring.cloud.nacos.config.extension-configs[n].data-id
的配置方式来支持多个 Data Id 的配置。 -
通过
spring.cloud.nacos.config.extension-configs[n].group
的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。 -
通过
spring.cloud.nacos.config.extension-configs[n].refresh
的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。
Note | 多个 Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.extension-configs[n].data-id 其中 n 的值越大,优先级越高。 |
Note | spring.cloud.nacos.config.extension-configs[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。 |
通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。
为了更加清晰的在多个应用间配置共享的 Data Id ,你可以通过以下的方式来配置:
# 配置支持共享的 Data Id spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml # 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP spring.cloud.nacos.config.shared-configs[0].group=GROUP_APP1 # 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false spring.cloud.nacos.config.shared-configs[0].refresh=true
可以看到:
-
通过
spring.cloud.nacos.config.shared-configs[n].data-id
来支持多个共享 Data Id 的配置。 -
通过
spring.cloud.nacos.config.shared-configs[n].group
来配置自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。 -
通过
spring.cloud.nacos.config.shared-configs[n].refresh
来控制该Data Id在配置变更时,是否支持应用中动态刷新,默认false。
配置的优先级
Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。
-
A: 通过
spring.cloud.nacos.config.shared-configs[n].data-id
支持多个共享 Data Id 的配置 -
B: 通过
spring.cloud.nacos.config.extension-configs[n].data-id
的方式支持多个扩展 Data Id 的配置 -
C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置
当三种方式共同使用时,他们的一个优先级关系是:A < B < C
用法举例:
config:
server-addr: 127.0.0.1:8848
prefix: ${spring.application.name}
file-extension: yml
shared-dataids: shareconfig1.yml,shareconfig2.yml
refreshable-dataids: shareconfig1.yml,shareconfig2.yml
或者:
config:
server-addr: http://1.1.178.129:8848
namespace: lbs-dev
group: lbs-group
prefix: ${spring.application.name}
file-extension: yaml
extension-configs:
- data-id: lbs-common-data.yaml
group: lbs-common-group
refresh: true
- data-id: lbs-common-data1.yaml
group: lbs-common-group
refresh: true
# extension-configs[0]:
# data-id: greeting.yml
# group: common
# refresh: true # 配置修改后是否自动更新
# extension-configs[1]:
# data-id: author.yml
# group: common
# refresh: true
几种配置方式,优先级顺序按上面的A < B < C来
完全关闭配置
通过设置 spring.cloud.nacos.config.enabled = false 来完全关闭 Spring Cloud Nacos Config