Spring Cloud - 配置管理(Spring Cloud Config)

Myth丶恋晨 2021-12-18 22:51 426阅读 0赞
为什么需要配置管理?

首先来谈谈“配置分离”的必要性。所谓配置分离,指的是把配置文件和应用代码分离开来,这样做有很多好处:

  • 可以统一管理配置,把多个应用的配置文件放到一个仓库下。
  • 可以复用配置,多个应用可能有一些配置是相同的,可以复用的。
  • 修改配置文件不用打包。如果配置文件不分离,一旦我们修改一个小的配置,就需要触发新的CI/CD Pipeline,重新打包、上传到nexus等资源库等操作。

除此之外,我们可能还想要能够在运行期间动态地去修改配置。于是微服务的配置管理工具应运而生,在Spring Cloud生态中,也几个配置管理工具,比如Spring Cloud Consul和Spring Cloud Zookeeper都能提供K-V存储,所以也能同时作为配置管理工具。而Spring Cloud Config是一款专为配置管理而生的更强大的工具。

当然,也有外部的一些开源的配置管理工具,比如携程的Apollo项目。

Spring Cloud Config简介

Spring Cloud Config(以下简称Config)是Spring Cloud旗下的一个子项目,目前已经发展成熟,可以直接用在生产环境上。Config支持非常多的配置数据源。比如Git、SVN、文件系统、Vault、数据库等等。比较常见的是使用Git进行存储。那它具体是怎么工作的呢?这里有一个Config的架构图:
在这里插入图片描述
首先我们需要有一个远程的Git仓库,用于存放所有的配置文件。然后要有一个Config Server,用于和微服务配合来统一管理配置。Config Server拉取远程的Git仓库存放到本地。

对于远程Git仓库认证,可以使用HTTPS+用户名密码的方式,也可以使用私钥的方式,推荐使用私钥。

失败快速相应

Spring Cloud Config的客户端会预先加载很多其他信息,然后再开始连接Config Server进行属性的注入。当我们构建的应用较为复杂的时候,可能在连接Config Server之前花费较长的启动时间,而在一些特殊场景下,我们又希望一可以快速知道当前应用是否能顺利地从Config Server获取到配置信息,这对在初期构建调试环境时,可以减少很多等待启动的时间。要实现客户端优先判断Config Server获取是否正常,并快速响应失败内容,只需要在bootstrap.properties中加入如下代码即可:

  1. spring:
  2. cloud:
  3. config:
  4. failFast: true
重试

在Config Server宕机或是客户端配置不正确导致连接不到而启动失败的情况,快速响应的配置可以发挥比较好的效果。但是,若只是因为网络波动等其他问歇性原因导致的问题,直接启动失败似乎代价有些高。所以,Config客户端还提供了自动重试的功能,在开启重试功能前,先确保己经配置了spring.cloud.config.fail-fast=true,再进行下面的操作。

  • 添加maven依赖:

    1. <dependency>
    2. <groupId>org.springframework.retry</groupId>
    3. <artifactId>spring-retry</artifactId>
    4. </dependency>
    5. <dependency>
    6. <groupId>org.springframework.boot</groupId>
    7. <artifactId>spring-boot-starter-aop</artifactId>
    8. </dependency>
动态刷新配置

顾名思义,为了可以动态获取配置信息。

  • 添加maven依赖

    1. <dependency>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-starter-actuator</artifactId>
    4. </dependency>
  • 在获取配置信息的api上增加@RefreshScope注解。

使用Spring Cloud Config

总的来说使用还是不难。按照官方文档一步一步做就行了。也可以参考我的代码配置管理(Spring Cloud Config)
在读取配置文件不再写ip地址,而是服务名,这时如果配置服务部署多份,通过负载均衡,从而高可用。

发表评论

表情:
评论列表 (有 0 条评论,426人围观)

还没有评论,来说两句吧...

相关阅读

    相关 spring cloud config

    config,同一配置中心 存在的原因,是为了解决什么问题? 方便配置文件更新,同一配置在git 配置内容安全与权限(即开发不能对项目的配置进行修改) 更