为什么需要服务配置
微服务意味着要将单体应用中的业务拆分成一个个子业务,每个服务的力度相对较小,因此系统中会出现大量的服务,为统一配置信息,需要一套集中式的、动态的配置管理方案。
常见的服务配置方案
Config
功能
- 集中管理配置文件。
- 不同环境不同配置,动态化的更新配置,分环境部署,比如dev/test/prod/beta/release。
- 运行期间动态调整配置,服务会向配置中心统一拉取配置信息。
- 当配置发生变动,服务不需要重启即可感知到配置的变化并应用新的配置。
-
服务端
项目中创建相应的微服务模块,其主程序添加@EnableConfigServer注解,yml配置如下图。
-

客户端
项目中创建相应的微服务模块,yml采用bootstrap.yml。
- application.yml是用户级的资源配置项。
- bootstrap.yml是系统级,优先级更高,因此客户端需要通过bootstrap.yml去获取全局配置优先加载,再加载自身的application.yml。

- 编写controller,暴露REST形式的配置信息。
Nacos
如何解决分布式配置的动态刷新问题
问题描述:git上修改了某一配置文件后,服务端(配置中心)可以及时发生变动,但服务端需要重启才能获取到变动的信息。
导致问题的原因:服务端直接与git相连,因此git发生变动配置中心可以及时更新,但客户端只能与配置中心连接,并不能自行同步配置中心的最新配置。
解决方案:
- 手动版客户端动态刷新
- 客户端引入spring-boot-starter-actuator依赖。
- yml文件中加入如下配置。

- controller文件加上@RefreshScope注解。
- 外部发送POST请求:客户端主机:端口/actuator/refresh告知客户端进行更新。
- 广播通知更新与范围通知中心需要通过消息总线实施。
