为什么需要服务配置

微服务意味着要将单体应用中的业务拆分成一个个子业务,每个服务的力度相对较小,因此系统中会出现大量的服务,为统一配置信息,需要一套集中式的、动态的配置管理方案。

常见的服务配置方案

Config

功能

  • 集中管理配置文件。
  • 不同环境不同配置,动态化的更新配置,分环境部署,比如dev/test/prod/beta/release。
  • 运行期间动态调整配置,服务会向配置中心统一拉取配置信息。
  • 当配置发生变动,服务不需要重启即可感知到配置的变化并应用新的配置。
  • 将配置信息以REST接口的形式暴露。

    服务端

  • 项目中创建相应的微服务模块,其主程序添加@EnableConfigServer注解,yml配置如下图。

  • git上需要创建相应的仓库。

    image.png

    客户端

  • 项目中创建相应的微服务模块,yml采用bootstrap.yml。

    • application.yml是用户级的资源配置项。
    • bootstrap.yml是系统级,优先级更高,因此客户端需要通过bootstrap.yml去获取全局配置优先加载,再加载自身的application.yml。

image.png

  • 编写controller,暴露REST形式的配置信息。

image.png

Nacos

如何解决分布式配置的动态刷新问题

问题描述:git上修改了某一配置文件后,服务端(配置中心)可以及时发生变动,但服务端需要重启才能获取到变动的信息。
导致问题的原因:服务端直接与git相连,因此git发生变动配置中心可以及时更新,但客户端只能与配置中心连接,并不能自行同步配置中心的最新配置。
image.png
解决方案

  • 手动版客户端动态刷新
    • 客户端引入spring-boot-starter-actuator依赖。
    • yml文件中加入如下配置。

image.png

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