• 【spring cloud】(五)配置中心——springcloud Config


    在这里插入图片描述

      各位小伙伴们大家好,欢迎来到这个小扎扎的spring cloud专栏,在这个系列专栏中我对B站尚硅谷阳哥的spring cloud教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛

    🍹 springcloud Config

    🍸 什么是springcloud Config?

      简单来说,Spring Cloud Config就是我们通常意义上的配置中心,也就是微服务项目中,每一个微服务都需要配置相应的配置,如果不同服务的配置文件有相同的配置,如果这些相同配置需要修改的话就要全都修改一遍。如果使用springcloud Config的话就可以把原本放在本地文件的配置抽取出来放在中心服务器,从而能够提供更好的管理、发布能力。
      Config分为服务端和客户端,服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访接口。客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容

    🍸 config服务端的配置使用

      第一步: 外部config需要结合git使用,于是需要在github或者gitee创建一个仓库,仓库里全都是各种配置文件,git远程仓库的创建这里就不多加赘述,创建完成之后需要获取到仓库的链接在这里插入图片描述
      第二步: 引入相关依赖

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

      第三步: 配置文件配置远程仓库地址

    server:
      port: 3344
    
    spring:
      application:
        name: cloud-config-center #注册进Eureka服务器的微服务名
      cloud:
        config:
          server:
            git:
              uri: https://gitee.com/mereign/springcloud-config.git    #GitHub或者Gitee上面的git仓库名字
              search-paths: #搜索目录
                - springcloud-config
          label: master #读取分支
          #启动成功后访问的路径 http://ip:3344/{label}/{application}-{profile}.yml 能访问的配置文件 就表示成功了
    
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:7001/eureka
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

      启动配置中心微服务模块,但是有些小伙伴会遇到这个异常Authentication is required but no CredentialsProvider has been registered,原因是你的远程仓库创建的私有的未开源,解决方案有两种,一来就是把仓库修改为开源仓库,还有就是使用下面的方法配置你github或者Gitee的用户名和密码

    spring:
      application:
        name: cloud-config-center #注册进Eureka服务器的微服务名
      cloud:
        config:
          server:
            git:
              uri: https://gitee.com/mereign/springcloud-config.git    #GitHub或者Gitee上面的git仓库名字
              username: 自己的github或者Gitee用户名
              password: 自己的github或者Gitee密码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

      第四步: 主程序类使用@EnableConfigServer注解标注Config服务端

    配置好了之后启动微服务,可以使用url链接直接读取文件里的内容在这里插入图片描述

    🍸 config客户端的相关问题

    🍷 config客户端的配置使用

      第一步: 引入相关依赖,这里客户端的依赖与服务端有所不同

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

      第二步: 配置文件,这里的客户端的配置文件与之前的有所不同,命名为bootstrap.yml,主要区别为applicaiton.yml是用户级的资源配置项,而bootstrap.yml是系统级的,优先级更加高

    server:
      port: 3355
    
    spring:
      application:
        name: config-client
      cloud:
        config:
          uri: http://localhost:3344  #配置中心的地址
          label: master  #分支名称
          name: config  #配置文件名称
          profile: dev  #读取后缀名称   上述三个综合http://localhost:3344/master/config-dev.yml
    
    #服务注册到eureka地址
    eureka:
      client:
        service-url:
          #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
          defaultZone: http://localhost:7001/eureka #单机版
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

      经过上述配置,等服务启动开的时候,会3355服务端会到3344服务端获取config-dev的配置内容,3344服务端再来连接配置的GitHub或者Gitee仓库从而获取config-dev的配置内容

      第三步: 主程序类只需要标注eureka客户端即可,无需标注config客户端
      第四步: 服务端的url链接形式获取内容,而客户端需要使用REST接口的形式获取指定配置信息

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

    启动主程序类(要先启动注册中心eureka再启动config服务端,最后才能启动config客户端),然后访问controller中的接口即可获得相应的配置信息在这里插入图片描述

    🍷 动态刷新问题

      当远程仓库的配置修改之后,服务端通过url链接的形式获取内容是更新之后的,但是客户端使用REST接口的形式获取到的配置信息则是更新之前的,只有重启config服务端微服务才能通过客户端接口访问到更新之后的配置信息。
      为了解决上述的问题,可以使用动态刷新配置服务端微服务,避免每次配置更新都需要重启微服务才能获取最新配置的痛点
      第一步: 引入actuator监控技术依赖

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

      第二步: bootstrap.yml文件中暴露服务端点,可以让这个服务处于可被监控状态

    # 暴露监控端点
    management:
      endpoints:
        web:
          exposure:
            include: "*"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

      第三步: 在controller类上加@RefreshScope注解
      第四步: 发送post请求,手动刷新3355服务端的监控,这样才能刷新config服务端获取的配置信息

    curl -X POST "http://localhost:3355/actuator/refresh
    
    • 1

      第五步: 到此为止就config服务端就可以访问到远程仓库中最新的配置信息了

    🍸 config客户端的遗留问题

      config客户端动态刷新解决了微服务每次都要重启才能获取最新配置信息的问题,但是,如果config客户端有很多呢?每次远程仓库配置修改都需要使用post请求手动刷新所有的服务吗?是不是也很麻烦,那么是否可以使用广播的形式,一次通知处处生效,大范围的自动刷新,定制化的指定服务刷新?那就用到了下一篇博客学习的消息总线——springcloud Bus

  • 相关阅读:
    我的用户留言案例哪位懂的能帮我看一下
    Html将Json对象在页面结构化显示与Json文件生成下载
    《代号:魂之刃2》- 身处黑暗的勇者游戏
    构建一个快速数据分析(boruta+shap+rcs)的shiny APP
    java list集合运算
    群体优化算法---蝙蝠优化算法分类Iris数据集
    这个Spring Security登录插件牛啊,验证码、小程序、OAuth2都能快速接入
    如何将Mysql数据库的表导出并导入到另外的架构
    C++核心编程:P8->类和对象----运算符重载
    EasyGBS如何解决大屏播放时出现数据未推送情况?
  • 原文地址:https://blog.csdn.net/qq_59138417/article/details/126648615