• SpringCloud-2.0-周阳(19. 分布式配置中心 - Nacos)


    上一篇 :18. 服务注册发现 - Nacos

    下一篇 :20.Nacos 集群和持久化配置

    • 声明:原文作者:csdn:yuan_404

    • 上一篇已经对 Nacos 做过简单介绍了,这篇就直接开始作为服务配置中心演示

    1 . 配置中心 - 基础配置

    1. 新建模块 :alibaba-nacos-config-client-3377

    2. 修改 POM

      <dependencies>
          <!--nacos-config-->
          <dependency>
              <groupId>com.alibaba.cloud</groupId>
              <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
          </dependency>
          <!--nacos-discovery-->
          <dependency>
              <groupId>com.alibaba.cloud</groupId>
              <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
          </dependency>
          <!--web + actuator-->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-actuator</artifactId>
          </dependency>
          <!--一般基础配置-->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-devtools</artifactId>
              <scope>runtime</scope>
              <optional>true</optional>
          </dependency>
          <dependency>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
              <optional>true</optional>
          </dependency>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-test</artifactId>
              <scope>test</scope>
          </dependency>
      </dependencies>  
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
    3. 编写 YML

    • bootstrap.yml

      server:
        port: 3377
      
      spring:
        application:
          name: nacos-config-client
        cloud:
          nacos:
            discovery:
              server-addr: localhost:8848 #服务注册中心地址
            config:
              server-addr: localhost:8848 #配置中心地址
              file-extension: yaml #指定yaml格式的配置
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
    • application.yml

      spring:
        profiles:
          active: dev
      
      
      • 1
      • 2
      • 3
      • 4
    1. 编写主启动类

      @SpringBootApplication
      @EnableDiscoveryClient
      public class NacosConfigClientMain3377 {
          public static void main(String[] args) {
              SpringApplication.run(NacosConfigClientMain3377.class, args);
          }
      }
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    2. 业务类

    • Controller :ConfigClientController

      @RestController
      @RefreshScope
      public class ConfigClientController {
          @Value("${config.info}")
          private String configInfo;
      
          @GetMapping("/config/info")
          public String getConfigInfo() {
              return configInfo;
          }
      }
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    1. 在Nacos中添加配置信息

    nacos-config-client-dev.yaml

    config:
    info: “{Config-Center:Nacos, Profiles:dev, Version:1.1.1}”

    1. 测试

      启动 Nacos 控制台

      启动 3377

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

    2. 修改配置,体验动态刷新

    2 . 配置中心 - 分类配置

    2.1 存在的问题

    1. 问题1 :

    实际开发中,通常─个系统会准备:

    • dev开发环境
    • test测试环境
    • prod生产环境。

    如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?

    1. 问题2:

    一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境…那怎么对这些微服务配置进行管理呢?

    2.2 Nacos 中的设计

    • 一个配置文件可以通过以下三个属性来定位

      Namespace+Group+Data ID

    • 这三个属性是什么

    • 类似Java里面的package名和类名
    • 最外层的 namespace 是可以用于区分部署环境的
    • Group 和 DatalID 逻辑上区分两个目标对象。
    • 三者关系

    • 默认情况:

    • 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,就是微服务的实例。

    2.3 按 Data-ID 分类

    • 指定 spring.profile.active 和配置文件的 DataID 来使不同环境下读取不同的配置
    • 当前测试的环境 :默认空间 + 默认分组 + 新建 dev 和 test 两个 DataID
    1. 新建 dev 环境的配置文件

    2. 新建 test 环境的配置文件

    3. 修改使用的配置文件

    4. 重启项目,测试

    2.4 按 Group 分类

    • 通过 Group 实现环境区分
    1. 新建一个 DEV 分组

    2. 新建一个 TEST 分组

    3. 修改 application.yml

    4. 修改 bootstrap.yml

    5. 测试

    6. 修改分组

    7. 测试

    2.5 按 Namespace 分类

    1. 新建 DEV 、TEST 两个命名空间

    2. 在 DEV、TEST 两个命名空间中添加相应配置文件

    3. 修改 bootstrap.yml

    4. 测试

    5. 切换命名空间

    6. 测试

  • 相关阅读:
    启动docker服务
    Linux 安装 Docker +Docker Compose + cucker/get_command_4_run_container
    Python 多进程和多线程【彻底搞懂篇】
    how to alert when etl inbound file delay in GCP storage
    在 Ubuntu 16.04 上从0到1教你如何移植osqp
    string类的使用方式的介绍
    【leetcode】传递信息 c++
    优思学院|“防呆”的英文是哪个才对?- CLMP
    0基础,跟我一起学python--基础篇(2)
    用结构体数组,完成宠物信息登记管理。
  • 原文地址:https://blog.csdn.net/Mango_Bin/article/details/125475316