• SpringCloud搭建微服务之Config配置中心


    1. 概述

    在采用分布式微服务架构的系统中,由于服务数量众多,为了方便服务配置文件的统一管理,需要分布式配置中心组件。SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置
    SpringCloud Config分为服务端和客户端两部分,服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口。客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息
    配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容

    1.1. Config配置中心功能

    1. 集中管理配置文件
    2. 不同环境不同配置,动态化的配置更新,分环境部署
    3. 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
    4. 当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
    5. 将配置信息以REST接口的形式暴露

    2. 搭建Config Server服务

    2.1. 引入核心依赖

    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-config-serverartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    2.2. 编写主启动类

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

    2.3. 编写application.yml配置

    server:
      port: 8820
    spring:
      application:
        name: cloud-config-server
      cloud:
        config:
          server:
            git:
              uri: https://github.com/xxxx/springcloud-config.git #git仓库地址
              default-label: master #读取分支
              search-paths:
                - springcloud-config #文件目录
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.4. 验证

    在git仓库springcloud-config目录下新建配置文件config-prod.yml,并添加配置信息

    config:
      info: "master branch,springcloud-config/config-prod.yml version=1"
    
    • 1
    • 2

    启动Config Server微服务,在浏览器地址栏输入地址http://localhost:8820/master/config-prod.yml
    配置中心

    3. 搭建Config Client服务

    3.1. 引入核心依赖

    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-configartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    3.2. 编写主启动类

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

    3.3. 编写bootstrap.yml配置

    server:
      port: 8821
    spring:
      application:
        name: cloud-config-client
      cloud:
        config:
          label: master
          name: config
          profile: prod
          uri: http://localhost:8820
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.3. 编写测试接口类

    @RestController
    public class ConfigClientController {
    
        @Value("${config.info}")
        private String configInfo;
    
        @GetMapping("/getConfigInfo")
        public String getConfigInfo() {
            return configInfo;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.4. 验证

    依次启动Config Server和Config Client两个微服务,在浏览器地址栏输入http://localhost:8821/getConfigInfo
    配置中心客户端访问

    4. 结合Eureka自动发现

    4.1. 引入核心依赖

    在两个微服务中引入Eureka Client依赖

    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    4.2. 编写配置文件

    在两个微服务配置文件中添加Eureka配置

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka
    
    • 1
    • 2
    • 3
    • 4

    并且在Config Client微服务配置文件中开启配置文件的自我发现机制

    spring:
      cloud:
        config:
          discovery:
            enabled: true #开启配置服务的自动发现机制
            service-id: cloud-config-server
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5. Config Client动态刷新

    修改git环境配置后,Config Server可以立刻获取到配置信息,Config Client服务却需要重启或重新加载才能获取到配置信息,所以就需要让Config Client动态刷新获取配置信息

    5.1. 引入核心依赖

    在Config Client微服务中引入核心依赖

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-actuatorartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    5.2. 修改bootstrap.yml配置文件

    在bootstrap.yml中暴露监控端口

    management:
      endpoints:
        web:
          exposure:
            include: '*'
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5.3. 在接口类中加入注解

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

    5.4. 验证

    重新启动微服务Config Client,修改git上配置信息版本号为2,访问Config Server服务http://localhost:8820/master/config-prod.yml
    修改后访问服务
    再访问http://localhost:8821/getConfigInfo,发现配置信息并没有更新,发送POST请求(curl -X POST “http://localhost:8821/actuator/refresh”)刷新Config Client
    刷新客户端服务
    再次访问http://localhost:8821/getConfigInfo地址,发现已经获取到了最新配置信息
    刷新后访问客户端

  • 相关阅读:
    macOS环境使用HomeBrew安装MySQL【日常记录,可供参考】
    Docker (二): Docker安装及配置镜像加速
    关于缓存使用和注意事项的思考
    项目实战:通过axios加载水果库存系统的首页数据
    深度学习(二)BERT模型及其一系列衍生模型
    Java Character.SubSet hashCode()方法具有什么功能呢?
    【lwip】07-链路层收发以太网数据帧源码分析
    Linux CentOS7 vim宏操作
    golang mapstructure库实践
    透视俄乌网络战之四:西方科技巨头的力量
  • 原文地址:https://blog.csdn.net/liu320yj/article/details/126837216