十一. SpringCloud Alibaba (5)

在多环境多项目管理时,也就是实际开发中,通常一个系统会准备不同的开发环境,如dev开发环境、test测试环境、prod生产环境,如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境等,那对这些微服务配置该如何管理呢?=> 在Nacos配置中心中就可以进行分类配置,一个配置文件的具体所属由 namespace + Group + dataId 所构成

image-20210305182438870

为什么如此设计?

这种设计就类似于Java中的包名和类名,最外层的 namespace 是可以用于区分部署环境的,主要用来实现隔离,比如有三个环境:开发、测试、生产,那就可以创建三个 namespace。

Group dataId 逻辑上区分两个目标对象。Group可以把不同的微服务划分到同一个分组里面去。Service就是微服务,一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFALUT,Cluster是对指定微服务的一个虚拟划分。

举例:比如说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称HZ,给广州机房的Service微服务起一个集群名字GZ,还可以尽量让同一个机房的微服务互相调用,以提升性能。

最后就是Instance,就是微服务的实例。

默认情况下 namespace 的值为 public, Group 的值为 DEFAULT_GROUP,默认Cluster是DEFAULT。

image-20210305182816916

下面对这三个属性进行详细展开。

dataId 方案

指定 spring.profile.active 配置属性和配置文件的 dataId 来使不同环境下读取不同的配置,也就是说我们现在用默认的命名空间 namespace (即 public),默认的分组 Group (即 DEFAULT_GROUP),然后在Nacos配置中心中建立两个 dataId 分别为 dev 环境和test环境。此时在同一命名空间同一组中就有了两个应用于开发、测试不同环境的配置文件:

image-20210305183940816

然后我们通过修改微服务自己定制配置信息 application.yml 配置文件中的spring.profile.active 属性即可进行多环境下的配置文件的读取,配置什么就加载什么,在之前我们的3377微服务获取的是配置中心中 nacos-config-client-dev.yaml 配置文件的配置信息,现在我们将 application.yml 修改为:

spring: profiles: # active: dev # 表示开发环境 active: test # 表示开发环境

然后重启3377微服务,再次进行测试发现访问到的配置信息为测试环境的配置信息:

image-20210305184116109

Group 方案

不仅通过 dataId 可以实现环境分区,应用 Group 也可以实现环境分区,首先我们在Nacos配置中心新建两个相同 dataId,不同 Group 的配置文件,一个用于开发环境,一个用于测试环境:

image-20210305184507922

由于这两个配置文件的 dataId 均为 nacos-config-client-info.yaml ,根据之前解释的 dataId 的命名规则,我们应该将3377微服务的自定义配置文件 application.yml 中的 spring.profile.active 属性更改为 info:

spring: profiles: active: info

在确认了读取的配置文件的 dataId 后,我们在其 bootstrap.yml 配置文件中添加 spring.cloud.nacos.config.group 属性,设置为相应的组名即可,比如我们现在设置为测试环境组:

spring: cloud: nacos: config: group: TEST_GROUP

重启3377微服务,再次访问可以发现获取到的配置信息即为TEST_GROUP组的配置信息。

namespace 方案

根据namespace同样可以进行环境区分。

新建两个命名空间

image-20210305185521368

服务列表查看

image-20210305190235725

在 bootstrap.yml 配置文件中添加 spring.cloud.nacos.config.namespace 属性,设置为相应的命名空间流水号即可,比如我们现在设置为开发环境命名空间:

spring: cloud: nacos: config: namespace: 5e4fbf07-10f3-4216-86c5-e40391667310

在dev命名空间下新建不同group的配置文件

image-20210305191801785

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpszdz.html