面试题答案
一键面试Spring Cloud中分布式配置管理基本原理
Spring Cloud分布式配置管理旨在将应用程序的配置信息集中管理,使不同环境(开发、测试、生产等)的配置可以统一维护和管理,且支持动态更新。其核心原理基于将配置信息存储在外部配置仓库(如Git、SVN或本地文件系统等),各微服务通过与配置服务器交互获取配置,实现配置与代码分离。这样可以提高配置的灵活性,便于统一管理和修改,减少不同环境配置不一致问题。
Config Server和Config Client协作实现配置集中管理和动态更新
- 配置集中管理
- Config Server:作为配置中心,负责从配置仓库拉取配置文件。例如,可以连接到Git仓库,读取其中存放的各微服务配置文件(如application.yml或application.properties)。它提供了一个RESTful接口,供Config Client获取配置。
- Config Client:在启动时,通过HTTP请求向Config Server发送获取配置的请求。请求中会包含自身的应用名称、环境(如dev、prod)以及标签(如master分支)等信息。Config Server根据这些信息从配置仓库中找到对应的配置文件,返回给Config Client。Config Client将获取到的配置加载到自身的环境中,应用便可使用这些配置。
- 动态更新
- Config Server:支持配置文件的动态修改。当配置仓库中的配置文件发生变化(如在Git仓库中提交了新的配置更改),Config Server可以感知到变化(通过轮询或Webhook机制)。但默认情况下,Config Server本身不会主动通知Config Client配置已更新。
- Config Client:有两种方式实现动态更新配置。
- 手动刷新:在Config Client应用中,引入Spring Cloud Bus依赖并结合Actuator。通过发送POST请求到Config Client的/actuator/refresh端点,Config Client会再次向Config Server请求最新配置,并将新配置更新到运行环境中,而无需重启应用。
- 自动刷新(结合Spring Cloud Bus):Spring Cloud Bus通过轻量级消息代理(如RabbitMQ或Kafka)连接各个微服务实例。当配置仓库发生变化时,Config Server可以通过消息代理发送一条消息通知所有Config Client更新配置。Config Client接收到消息后,自动向Config Server获取最新配置并更新自身运行环境,实现配置的动态更新。