配置文件是我们再熟悉不过的,在微服务系统中,每个微服务不仅仅只有代码,还需要连接其他资源,例如数据库的配置或功能性的开关 MySQL、Redis 、Security 等相关的配置。除了项目运行的基础配置之外,还有一些配置是与我们业务有关系的,比如说七牛存储、短信和邮件相关,或者一些业务上的开关。
但是随着微服务系统的不断迭代,整个微服务系统可能会成为一个网状结构,这个时候就要考虑整个微服务系统的扩展性、伸缩性、耦合性等等。其中一个很重要的环节就是配置管理的问题。
常规配置管理解决方案缺点
硬编码(需要修改代码、繁琐、风险大)
properties 或者 yml(集群环境下需要替换和重启)
xml(重新打包和重启)
为什么使用 Spring Cloud Config
由于常规配置管理有很大的缺点,所以采用 Spring Cloud Config 集中式的配置中心来管理每个服务的配置信息。
Spring Cloud Config 在微服务分布式系统中,采用 Server 服务端和 Client 客户端的方式来提供可扩展的配置服务。服务端提供配置文件的存储,以接口的形式将配置文件的内容提供出去;客户端通过接口获取数据、并依据此数据初始化自己的应用。
配置中心负责管理所有服务的各种环境配置文件。
配置中心默认采用 Git 的方式存储配置文件,因此我们可以很容易的部署和修改,有助于环境配置进行版本管理。
Spring Cloud Config 解决了什么问题
Spring Cloud Config 解决了微服务配置的中心化、版本控制、平台独立、语言独立等问题。其特性如下:
提供服务端和客户端支持(Spring Cloud Config Server 和 Spring Cloud Config Client)
集中式管理分布式环境下的应用部署
属性值的加密和解密(对称加密和非对称加密)
基于 Spring 环境,无缝与 Spring 应用集成
可用于任何语言开发的程序
默认实现基于 Git ,可以进行版本管理
接下来,我们主要从以下几块来讲一下 Config 的使用。
基础版的配置中心(不集成 Eureka)
集成 Eureka 版的高可用配置中心
基于 Actuator 实现配置的自动刷新
配置中心属性值的加密和解密(对称加密和非对称加密)
基于 Spring Cloud Bus 实现配置的自动刷新
配置中心用户安全认证
环境准备
项目
config-demo 聚合工程。SpringBoot 2.2.4.RELEASE、Spring Cloud Hoxton.SR1。
eureka-server:注册中心(用于集成 Eureka 版的配置中心)
eureka-server02:注册中心(用于集成 Eureka 版的配置中心)
order-service:订单服务(用于集成 Eureka 版的配置中心)
仓库
config-repo 仓库。
Repository name:仓库名称
Description(可选):仓库描述介绍
Public,Private:仓库权限(公开共享,私有或指定合作者)
Initialize this repository with a README:添加一个 README.md
Add .gitignore:不需要进行版本管理的文件类型,生成对应文件 .gitignore
Add a license:证书类型,生成对应文件 LICENSE
配置文件
不同环境的配置文件,上传至 config-repo 仓库。
配置文件的名称不是乱起的,例如 config-client-dev.yml 和 config-client-prod.yml 这两个文件是同一个项目的不同环境,项目名称为 config-client, 一个对应开发环境,一个对应正式环境。test 表示测试环境。
config-client.yml
server: port: 7777 # 端口 spring: application: name: config-client # 应用名称 # 自定义配置 name: config-client-default
config-client-dev.yml
server: port: 7778 # 端口 spring: application: name: config-client # 应用名称 # 自定义配置 name: config-client-dev
config-client-test.yml
server: port: 7779 # 端口 spring: application: name: config-client # 应用名称 # 自定义配置 name: config-client-test
config-client-prod.yml
server: port: 7780 # 端口 spring: application: name: config-client # 应用名称 # 自定义配置 name: config-client-prod入门案例
入门案例讲解:基础版的配置中心(不集成 Eureka)
官方文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.2.RELEASE/reference/html/
创建服务端
点击链接观看:Config 入门案例创建服务端视频(获取更多请关注公众号「哈喽沃德先生」)
在 config-demo 父工程下创建子项目 config-server。
添加依赖