SpringCloud Alibaba之Nacos服务配置中心案例(二)-分类配置-共享配置

所有代码都在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.

下面附上直达目录:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值