11 Config:Spring Cloud分布式配置组件
11.1 Spring Cloud Config概述
-
分布式系统面临的配置文件的问题:分布式微服务系统意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务,几乎所有服务的运行都离不开配置文件的支持,这些配置文件通常由各个服务自行管理,以 properties 或 yml 格式保存在各个微服务的类路径下,例如 application.properties 或 application.yml 等。
-
这种将配置文件散落在各个服务中的管理方式,存在以下问题:
- 管理难度大:配置文件散落在各个微服务中,难以管理。
- 安全性低:配置跟随源代码保存在代码库中,容易造成配置泄漏。
- 时效性差:微服务中的配置修改后,必须重启服务,否则无法生效。
- 局限性明显:无法支持动态调整,例如日志开关、功能开关。
-
所以一套集中式的配置中心对配置进行统一管理,动态的配置管理设施是必不可少的。市面上开源的配置中心有很多,例如百度的 Disconf、淘宝的 diamond、360 的 QConf、携程的 Apollo 等都是解决这类问题的。SpringCloud提供了ConfigServer来解决这个问题。
-
Spring Cloud Config 是由 Spring Cloud 团队开发的项目,它可以为微服务架构中各个微服务提供集中化的外部配置支持。
Spring Cloud Config 为微服务架构中的微服务提供集中化的外部配置支持,将配置文件集中存储在一个外部的存储仓库或系统(例如 Git 、SVN 等)中,对配置的统一管理,以支持各个微服务的运行。
springboot多环境配置和yml多文档块是一种方式,但也是比较分散
接下来回顾下在springboot阶段配置文件的内容
多环境配置:
application-test.properties 代表测试环境配置
application-dev.properties 代表开发环境配置
优先使用使用application.properties主配置文件,然后在里面可以指定需要激活的环境spring.profiles.active=dev
yml多文档块按以下方式配置:
application.yml,若yml和properties同时都配置了端口,但在yml或properties中没有激活其他环境 , 默认会使用properties配置文件的,因为properties类型的配置文件的优先级高
server: port: 8081 #选择要激活那个环境块 spring: profiles: active: test --- server: port: 8083 spring: profiles: dev #配置开发环境的名称 --- server: port: 8084 spring: profiles: prod #配置生产环境的名称
- Spring Boot 自动查找和加载properties和yml配置文件的位置顺序
file:./config/*/ |项目路径下的config文件夹配置文件
file:/config/application.properties | 项目路径
file:/application.properties
classpath:/config/application.properties | src下的java或resources为类路径
classpath:/application.properties
-
Spring Cloud Config 包含以下两个部分:
- Config Server:也被称为分布式配置中心,它是一个独立运行的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密信息和解密信息的访问接口。
- Config Client:指的是微服务架构中的各个微服务,它们通过 Config Server来管理应用资源以及与业务相关的配置内容 ,并从 Config Sever 中获取和加载配置信息。
-
Spring Cloud Config 默认使用 Git 存储配置信息,因此使用 Spirng Cloud Config 构建的配置服务器天然就支持对微服务配置的版本管理。我们可以使用 Git 客户端工具方便地对配置内容进行管理和访问。除了 Git 外,Spring Cloud Config 还提供了对其他存储方式的支持,例如 SVN、本地化文件系统等。
-
Spring Cloud Config 工作原理如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YCPvGxxk-1664771379907)(…/typora-user-images/image-20220924121621584.png)]
-
Spring Cloud Config 工作流程如下:
- 开发或运维人员提交配置文件到远程的 Git 仓库。
- Config 服务端(分布式配置中心)负责连接配置仓库 Git,并对 Config 客户端暴露获取配置的接口。
- Config 客户端通过 Config 服务端暴露出来的接口,拉取配置仓库中的配置。
- Config 客户端获取到配置信息,以支持服务的运行。
-
Spring Cloud Config 具有以下特点:
- Spring Cloud Config 由 Spring Cloud 团队开发,能够与 Spring 的生态体系无缝集成。
- Spring Cloud Config 将所有微服务的配置文件集中存储在一个外部的存储仓库或系统(例如 Git)中,统一管理。
- Spring Cloud Config 配置中心将配置以 REST 接口的形式暴露给各个微服务,以方便各个微服务获取。
- 微服务可以通过 Spring Cloud Config 向配置中心统一拉取属于它们自己的配置信息。
- 当配置发生变化时,微服务不需要重启即可感知到配置的变化,并自动获取和应用最新配置。
- 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息。
- 一个应用可能有多个环境,例如开发(dev)环境、测试(test)环境、生产(prod)环境等等,开发人员可以通过 Spring Cloud Config 对不同环境的各配置进行管理,动态化的配置更新,且能够确保应用在环境迁移后仍然有完整的配置支持其正常运行。
11.2 windows安装git请翻阅git-1-版本控制介绍和安装配置
11.3 SpringCloud config分布式配置中心与gitee整合
- 由于Spring Cloud Config默认使用Git来存储配置文件(也有其他方式,比如支持SVN和本地文件),但是最推荐的还是Git,而且使用的是http/https访问的形式:
- 在 Github 上创建一个名为 springcloud-config 的仓库(Repository)并获取该仓库的地址。由于 Github 站点对于国内用户来说不够稳定,很可能存在加载缓慢等问题,因此我们可以在码云或上执行该操作。前提需要提前在码云上注册账号。Github /码云(gitee)/coding devops。都是基于git的代码托管平台和研发平台
- Gitee 提供了基于SSH协议的Git服务,使用http协议不用密钥,在使用SSH协议访问仓库之前,需要先配置好账户/仓库的SSH公钥。怎样生成公钥将生成的ssh公钥(包含邮箱地址)复制到公钥框中,标题自动显示。点击确定即可完成配置账户/仓库的SSH公钥。
-
选择一个存放代码的位置,右键选择git bash here,输入以下命令,然后针对Https协议需要输入仓库的用户名和密码才能下载,而git协议地址不用用户名和密码。
git clone [url] #Https或git协议的地址
spring:
profiles:
active: dev
---
spring:
config:
activate:
on-profile: dev
application:
name: springcloud-config-dev
config:
info : springcloud-config-test
version: 1.0.0
---
spring:
config:
activate:
on-profile: test
application:
name: springcloud-config-test
config:
info : springcloud-config-test
version: 1.0.0
---
spring:
config:
activate:
on-profile: prod
application:
name: springcloud-config-prod
config:
info : springcloud-config-test
version: 1.0.0
- 使用git命令行来将这个文件提交仓库,需要4步操作
- 先进到这个目录,在执行git add .添加当前目录的所有文件到暂存区
cd springcloud-config
# 添加当前目录的所有文件到暂存区
$ git add .
# 添加指定文件到暂存区
$ git add [file1] [file2] ...
- 查看状态
$ git status
3.提交暂存区到本地仓库区
# 提交暂存区到仓库区
$ git commit -m [message]
# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]
# 上传本地指定分支到远程仓库
$ git push [remote] [branch]
origin 代表你远程库的别名 可以随意命名的 不是当前用户的意思
下一篇:SpringCloud-28-Spring Cloud Config创建Config Server
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123796.html