简介

对于传统的单体应用,通常是使用配置文件来管理所有的配置,但是在微服务架构中,会存在很多的微服务,如果每一个微服务都维护自己的配置,显然是非常的麻烦且不灵活,维护成本会非常高

使用Spring Cloud Config可以实现一下功能

  • 集中管理配置
  • 不同环境,不同配置
  • 运行时期动态调整。并且在修改配置时不会停止微服务
  • 配置修改后自动更新

Spring Cloud Config 为分布式系统外部化配置提供了服务器端和客户端的支持,它包括Config Server 和 Config Client 两部分。默认使用 Git 存储配置内容(也可以使用Subversion、本地文件系统或 Vault 存储配置)。Config Client 会在微服务启动时,请求 Config Server 以获取所需要的配置属性,并且缓存在本地以提高性能。

图片描述

图片来源

实践

Config Server

准备Git仓库

这里需要一个Git仓库来存储配置文件,我是使用GitHub来做仓库的。需要在仓库的根目录下放置几个测试用的配置文件

clipboard.png

文件:

microservice-foo.properties
microservice-foo-dev.properties
microservice-foo-test.properties
microservice-foo-production.properties

内容分别是:

profile=default-1.0
profile=dev-1.0
profile=test-1.0
profile=production-1.0

然后新建分支dev ,并且将 microservice-foo-dev.properties 文件中的内容修改为 profile=dev-2.0

编写代码

集成:

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

启动文件添加@EnableConfigServer标签

配置文件:

spring.application.name=microservice-config-server

# 这个uri使用可以clone的路径
spring.cloud.config.server.git.uri=https://github.com/wkkdhr/Dome1.git
# github的账号密码
spring.cloud.config.server.git.username=***
spring.cloud.config.server.git.password=***

启动服务之后,就可以使用 Config Service 的端点获取配置文件内容了。配置文件与端点的映射规则如下:

/{application}/{profile}/{label}

/{application}-{profile}.yml
/{application}-{profile}.properties

/{label}/{application}-{profile}.yml
/{label}/{application}-{profile}.properties

占位符含义:

  • {application} 表示微服务名称。microservice-foo-dev.properties 中 microservice-foo 就是微服务名称
  • {profile} 表示微服务名后面的dev、test等。microservice-foo-dev.properties 中 dev 就是{profile}
  • {label} 表示Git仓库分支,默认是master,可省略

访问 http://localhost:8080/microservice-foo/dev 得到以下结果:

clipboard.png

可以看到相关的配置详情信息。

访问 http://localhost:8080/microservice-foo-dev.properties 可以直接获取配置文件内容:

clipboard.png

需要说明一下,因为是使用GitHub来作为Git仓库,所以访问有可能会出现失败的风险


同名给你糖
23 声望1 粉丝

正在学习Spring Cloud