Nacos配置中心

今天花时间把nacos配置中心学习了一下,做个笔记记录一下!

Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config。通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。nacos配置中心:系统配置的集中管理(编辑、存储、分发)、动态更新不重启、回滚配置(变更管理、历史版本管理、变更审计)等所有与配置相关的活动。

应用场景

在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。

如果微服务架构中没有使用统一配置中心时,所存在的问题:

  • 配置文件分散在各个项目里,不方便维护
  • 配置内容安全与权限
  • 更新配置后,项目需要重启

具体配置

  • 导入依赖
    1. <dependency>
    2. <groupId>org.springframework.cloud</groupId>
    3. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    4. </dependency>
  • 此时需要创建bootstrap.yml配置文件
    Nacos配置中心 - 图1
    bootstrap.yml 和 application.yml 区别:
    • bootstrap.yml(先加载)用于应用程序上下文的引导阶段。
    • bootstrap.yml (后加载)由父Spring ApplicationContext加载,父ApplicationContext 被加载到使用 application.yml 的之前。

配置nacos注册的发现地址: discovery. server-addr = xxx
配置nacos配置文件发现地址:config. server-addr = xxx,少配置会找不到配置文件位置
注意:此时如果使用yml格式的配置文件需要添加 file-extension: yml

  1. spring:
  2. application:
  3. name: service-statistics # 微服务名称
  4. profiles:
  5. active: dev # 设置为开发环境
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: 127.0.0.1:8848 # 配置nacos
  10. config:
  11. file-extension: yml
  12. server-addr: 127.0.0.1:8848 # 发现配置文件地址
  • nacos中创建配置文件
    • Nacos配置中心 - 图2
    • Nacos配置中心 - 图3
      Data ID配置规则:
      Nacos配置中心 - 图4{spring.profile.active}.${file-extension}
      - prefix 默认为所属工程配置spring.application.name 的值(即:nacos-provider),也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
      - spring.profiles.active=dev 即为当前环境对应的 profile。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 Nacos配置中心 - 图5{file-extension}
      - file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
    • Nacos配置中心 - 图6
      此时创建成功。
    • 启动项目即可发现端口号为8008

多配置文件加载

在一些情况下需要加载多个配置文件。假如现在dev名称空间下有三个配置文件:service-statistics.yml、redis.yml、jdbc.yml,即可以实现分开加载配置文件,将相同的配置信息分开,需要直接读取即可。

  • 此处我建立了一个配置文件,将端口号该为8111,注释掉原来的端口号8008
    Nacos配置中心 - 图7
  • 又创建数据源的配置文件
    Nacos配置中心 - 图8
  • 此时在yml配置文件中添加以下配置,ext-config可以配置多个
    1. cloud:
    2. nacos:
    3. discovery:
    4. server-addr: 127.0.0.1:8848 # 配置nacos
    5. config:
    6. file-extension: yml
    7. server-addr: 127.0.0.1:8848 # 发现配置文件地址
    8. ext-config[0]:
    9. data-id: port.yml
    10. refresh: true # 开启动态刷新配置,否则配置文件修改,工程无法感知
    11. ext-config[1]:
    12. data-id: datasource.yml
    13. refresh: true
  • 可以返现此时项目加载了三个配置文件
    Nacos配置中心 - 图9

名称空间切换环境

在实际开发中,通常有多套不同的环境(默认只有public),那么这个时候可以根据指定的环境来创建不同的 namespce,例如,开发、测试和生产三个不同的环境,那么使用一套 nacos 集群可以分别建以下三个不同的 namespace。以此来实现多环境的隔离。

  • 创建多个名称空间
    Nacos配置中心 - 图10
  • 克隆到到不同的空间环境
    Nacos配置中心 - 图11
    Nacos配置中心 - 图12
    此时修改port为8520来做区别
  • yml配置文件中配置

    1. config:
    2. namespace: 8d5eccfa-9d86-4740-a6d5-d5ee5fc8a381


    namespace如下图
    Nacos配置中心 - 图13

  • 此时启动项目端口号为
    Nacos配置中心 - 图14