配置共享;不同环境不同项目能自由切换和读取配置中心里面的数据
当配置越来越多的时候,我们就发现有很多配置是重复的,这时候就考虑可不可以将公共配置文提取出来,然后实现共享呢?
比如,问题1:实际开发中,通常一个系统会准备
- dev开发环境
- test测试环境
- prod生产环境。
- 如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?
比如,问题2:
- 一个大型分布式微服务系统会有很多微服务子项目,
- 每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境……
- 那怎么对这些微服务配置进行管理呢?
如果遇到上面的问题,其实就是需要我们对配置进行分类处理。这里大家得需要了解几个概念的问题
命名空间(Namespace):命名空间可用于进行不同环境的配置隔离。一般一个环境划分到一个命名空间
配置分组(Group):配置分组用于将不同的服务可以归类到同一分组。一般将一个项目的配置分到一组
配置集(Data ID):在系统中,一个配置文件通常就是一个配置集。一般微服务的配置就是一个配置集
这三者关系:
默认情况:
Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT
Nacos默认的命名空间是public,Namespace主要用来实现隔离。
比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
Group默认是DEFAULT GROUP,Group可以把不同的微服务划分到同一个分组里面去
Service就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。
比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
最后是Instance,就是微服务的实例。
案例一:Data ID 进阶使用
- 指定spring.profile.active和配置文件的DatalD来使不同环境下读取不同的配置
- 默认空间+默认分组+新建dev和test两个DatalD
- 通过spring.profile.active属性就能进行多环境下配置文件的读取
第一步:创建 application.yml,将 spring.profile.active 属性移植到 application.yml 文件中
第二步:再次在配置中心中新建 nacos-config-client-test.yaml 文件。这样就形成了两个DataID
案例二:Group 进阶使用
- 新建两个Group:TEST_GROUP 和 DEV_GROUP
- 通过Group实现环境区分
- 在nacos图形界面控制台上面新建两个配置文件DatalD,但是名字一样 nacos-config-client-info.yaml
第一步:新建两个配置文件DatalD,但是名字一样 nacos-config-client-info.yaml
第二步:在bootstap.yaml中,添加 spring.cloud.nacos.config.group 属性
server: port: 7001 spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 config: file-extension: yaml server-addr: localhost:8848 group: DEV_GROUP # 配置中心分组 # 配置中心文件格式 ${spring.application.name}-{spring.profile.active}.{file-extension}
第三步:修改application.yaml内容,让程序启动后加载 spring.profile.active.info
spring: profiles: active: info
案例三:Namespace 进阶使用
- 新建dev/test的Namespace
- 回到服务管理-服务列表查看
- 按照域名配置填写
第一步:新建命名空间,分别是dev 和 test 命名空间
第二步:回服务列表去查看命名空间
第三步:配置dev命名空间下DataId,Group
第四步:在bootstrap.yml文件中,添加 spring.cloud.nacos.config.namespace 属性,属性指向 namespace 的 id
server: port: 7001 spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 config: file-extension: yaml server-addr: localhost:8848 group: DEV_GROUP namespace: 2a7e7783-99e1-49da-bfe5-82ff7840da15 # 配置中心文件格式 ${spring.application.name}-{spring.profile.active}.{file-extension}