目录

springcloudAlibaba_nacos 配置中心

基础配置演示

  1. 新建moudle,cloudalibaba-config-nacos-client3377

  2. pom

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    
  3. yml

    bootstrap.yml

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    server:
      port: 3377
       
    spring:
      application:
        name: cloudalibaba-config-nacos-client3377
      cloud:
        nacos:
          config:
            # 配置中心地址
            server-addr: localhost:8848
            # 指定配置格式yaml
            file-extension: yaml
    

    application.yml

    1
    2
    3
    
    spring:
      profiles:
        active: dev
    
    为什么要配置两个?
    bootstrap.yml 用作系统级资源配置项,application.yml 用作用户级的资源配置项。在项目中两者配合共同生效,bootstrap.yml 优先级更高
  4. 主启动

  5. 业务类

  6. 在Nacos中添加配置信息

    在 Nacos Spring Cloud 中, dataId 有明确的配置规则,官方也有说明。进入链接查看:官网链接。此处也做一点简单介绍。

    dataId 的完整格式如下:

    1
    
    ${prefix}-${spring.profile.active}.${file-extension}
    
    • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
    • spring.profile.active 即为当前环境对应的 profile。注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}(建议:不要让 spring.profile.active 为空,或许会有一些意外的问题)
    • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

    http://img.cana.space/picStore/20201114133905.png

  7. 验证,成功获取配置值&自带动态刷新(不需要webhook)

    访问: http://localhost:3377/info

    http://img.cana.space/picStore/20201114134008.png

    从nacos配置中心更新值,再次访问上面链接,可以看到配置已经生效了

    http://img.cana.space/picStore/20201114134125.png

分类配置

项目开发中,一定会遇到 多环境多项目管理 问题。遇到下面问题时,Nacos 基础配置显然无法解决这些问题,接下来就对 Nacos 命名空间Group 相关概念做一些说明。

问题

问题1: 实际开发中,通常一个系统会准备 dev开发环境test测试环境prod生产环境,如何保证指定环境启动时服务能够正确读取到 Nacos 上相应环境的配置文件?

问题2: 一个大型的分布式微服务系统会有很多个微服务子项目,每个微服务项目又都会有相应的 dev开发环境test测试环境预发环境prod生产环境 等,那怎么对这些微服务配置进行管理呢?

Nacos的命名规则说明

Nacos 命名由 Namespace(命名空间) + Group(分组) + Data ID(实例ID) 三部分组成,类似于 Java 中的 package(报名) + class(类名) 方式。最外层 Namespace 用于区分部署环境;Group 和 Data ID 逻辑上用于区分两个目标对象。

http://img.cana.space/picStore/20201114140741.png

默认情况下:Namespace = publicGroup = DEFAULT_GROUPCluster=DEFAULT

Namespace 主要用来实现隔离,Nacos 默认的命名空间是 public。比方说我们现在有三个环境:开发测试生产环境,我们就可以创建三个 Namespace,不同的 Namespace 之间是隔离的;

Group默认是DEFAULT_GROUP,GROUP可以把不同的微服务划分到同一个分组里面去

Service就是微服务,一个 Service 可以包含多个 Cluster(集群),Nacos 默认 Cluster 是 DEFAULT,Cluster 是对指定微服务的一个虚拟划分。比方说为了容灾,将 Service 微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的 Service 微服务起一个集群名称(HZ),给广州机房的 Service 微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。

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

DataId方案

指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置

默认空间+默认分组+新建dev和test两个DataID

http://img.cana.space/picStore/20201114141939.png

通过spring.profile.active属性就能进行多环境下配置文件的读取

application.yml

1
2
3
spring:
  profiles:
    active: test

访问:http://localhost:3377/info

1
从配置中心获取配置信息=========>nacos config center for test, version = 2.0

Group方案

通过Group实现环境区分,新建两个Group(在新建配置的时候指定Group即可)如下:

http://img.cana.space/picStore/20201114142508.png

新建结果:

http://img.cana.space/picStore/20201114142553.png

修改bootstrap.yml,增加一条group配置,可以配置为DEV_GROUP或者TEST_GROUP,如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
server:
  port: 3377

spring:
  application:
    name: cloudalibaba-config-nacos-client3377
  cloud:
    nacos:
      config:
        # 配置中心地址
        server-addr: localhost:8848
        # 指定配置格式yaml
        file-extension: yaml
        group: DEV_GROUP

application.yml修改成info环境

1
2
3
spring:
  profiles:
    active: info

重启服务,访问:http://localhost:3377/info

1
从配置中心获取配置信息=========>cloudalibaba-config-nacos-client3377-info.yaml, DEV_GROUP

改成:

1
group: TEST_GROUP

访问:http://localhost:3377/info

1
从配置中心获取配置信息=========>cloudalibaba-config-nacos-client3377-info.yaml, TEST_GROUP

NameSpace方案

新建dev和test两个Namespace

http://img.cana.space/picStore/20201114144318.png

回到配置列表

http://img.cana.space/picStore/20201114144425.png

bootstrap.yml增加namespace配置,属性值就是命名空间ID

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
server:
  port: 3377

spring:
  application:
    name: cloudalibaba-config-nacos-client3377
  cloud:
    nacos:
      config:
        # 配置中心地址
        server-addr: localhost:8848
        # 指定配置格式yaml
        file-extension: yaml
        group: DEFAULT_GROUP
        namespace: test123

访问:http://localhost:3377/info

1
从配置中心获取配置信息=========>test namespace, DEFAULT_GROUP, cloudalibaba-config-nacos-client3377-info.yaml