• spring cloud之配置中心


    Config 统一配置中心(*)

    1.简介
    # 统一配置中心
    - 官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.3.RELEASE/reference/html/#_spring_cloud_config_server
    
    - config 分为 config server 和 config client。用来统一管理所有微服务的配置
    
    • 1
    • 2
    • 3
    • 4
    • 统一配置中心流程图
      在这里插入图片描述
    2.config server 开发
    • 引入依赖
    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-config-serverartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-actuatorartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-consul-discoveryartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 配置文件
    server.port=8555
    # 服务名
    spring.application.name=CONFIG-SERVER
    
    # consul 注册中心地址
    spring.cloud.consul.host=localhost
    spring.cloud.consul.port=8500
    
    # gitee 仓库地址
    spring.cloud.config.server.git.uri=https://gitee.com/lwwby/config-center.git
    # 指定默认拉取配置信息的分支名
    spring.cloud.config.server.default-label=master
    # 如果仓库是私有的,需要配置用户名和密码
    #spring.cloud.config.username=
    #spring.cloud.config.password=
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 启动类添加注解@EnableConfigServer
    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableConfigServer
    public class ConfigServerApplication {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    3.config client 开发

    config client也就是一个个具有实际业务含义的微服务,例如order服务,user服务

    • 引入依赖
     
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-config-clientartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-actuatorartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-consul-discoveryartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 以gitee作为仓库,在gitee上新建仓库config-center

    分别新建 configclient.properties、 configclient-dev.properties、 configclient-test.properties。

    在实际开发中,建议以服务名命名,例如order-dev.properties/order-dev.yml
    在这里插入图片描述
    在这里插入图片描述

    • 项目中配置文件需要命名为bootstrap.properties/bootstrap.yml,容器启动时bootstrap.properties/bootstrap.yml命名会比application.properties/application.yml命名优先加载(先要去配置中心拉去配置到本地缓存)。

      bootstrap.properties 项目本地配置

      # 开启配置发现
      spring.cloud.config.discovery.enabled=true
      # 指定配置中心服务ID,去注册中心获取
      spring.cloud.config.discovery.service-id=CONFIG-SERVER
      
      # consul 注册中心地址
      spring.cloud.consul.host=localhost
      spring.cloud.consul.port=8500
      
      # 指定拉取配置文件的分支
      spring.cloud.config.label=master
      # 指定拉取配置文件的名称
      spring.cloud.config.name=configclient
      # 指定拉取配置文件的环境
      spring.cloud.config.profile=test
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15

      测试代码

      @RestController
      public class ConfigController {
      
          @Value("${name}")
          private String name;
      
          @GetMapping("/demo")
          public String demo() {
              return name;
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

      如果命名为application.properties/application.yml,config client启动会报错,ConfigController无法注入name属性(配置文件信息还未加载到本地)

    • 启动类,引入config-client依赖即可,无需加额外注解

    @SpringBootApplication
    @EnableDiscoveryClient
    public class ConfigClientApplication {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    config server启动后,可以通过地址获取配置信息,例如:http://localhost:8555/configclient-dev.properties
    在这里插入图片描述

    配置信息= configclient.properties(默认会获取到) + configclient-dev.properties

    4.手动配置刷新
    - 当远端git仓库中配置发生变化时,不需要重启微服务,就可以读取到修改之后的最新配置信息
    
    • 1
    • 1.在需要刷新的类上添加注解@RefreshScope
    // 添加注解@RefreshScope,仅作用于当前类ConfigController的配置刷新
    @RestController
    @RefreshScope
    public class ConfigController {
    
        @Value("${name}")
        private String name;
    
        @GetMapping("/demo")
        public String demo() {
            return name;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 2.开启刷新端点
    # 注意properties格式为*,yml格式为"*"
    # /actuator/refresh端点默认是不开启的。"*"代表开启所有端点
    management.endpoints.web.exposure.include=*
    
    • 1
    • 2
    • 3
    • 3.修改完远端git仓库配置后,向需要刷新配置的微服务发送一个POST请求
    - 使用post
    http://localhost:8655/actuator/refresh
    
    - 命令行终端
    curl -X POST http://localhost:8655/actuator/refresh
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    5.Bus组件
    - 官方文档: https://spring.io/projects/spring-cloud-bus
    
    - spring cloud bus使用轻量级消息代理将分布式系统的节点连接起来。然后可以使用它来广播状态更改(例如配置更改)或其他管理命令。AMQP和kafka broker(中间件)实现包含在项目中。或者,在类路径上找到任何spring cloud stream绑定器都可以作为传输使用。
    
    - bus称之为spring cloud中消息总线,主要用来在微服务系统中实现远端配置更新时,通过广播形式通知所有客户端刷新配置信息,避免手动重启服务来刷新配置
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 实现配置刷新原理
      在这里插入图片描述

    • 安装RabbitMQ(todo)

  • 相关阅读:
    Echarts-实现3D柱状图
    C语言Free空指针会怎样?
    王学岗————直播推流(软便)03x264集成与camera推流
    虚拟机macos安装brew、llvm并使用cmake构建项目
    Springboot+Mybatis处理复杂数据类型(Map、List等)
    linux grep 加 正则表达式搜索
    网站/顶会/工作组
    计算机基础知识47
    Python数据分析与挖掘————图像的处理
    AAAAAAAAA
  • 原文地址:https://blog.csdn.net/weixin_41858020/article/details/134407153