微服务配置管理
- 已掌握的微服务组件及配置管理问题引出
- 已掌握注册中心、Openfan、远程调用、负载均衡、网关等组件,具备微服务开发能力,但仍存在其他问题待解决。
- 微服务和网关存在大量配置文件,其中包含很多重复配置,如数据库、日志、接口文档等配置。随着微服务数量增多,重复配置和维护成本高成为问题。
- 配置管理服务解决重复配置问题
- 引入配置管理组件(服务),将微服务中重复或通用的配置交给它管理。
- 微服务启动时读取配置管理服务中的配置,实现配置共享,减少重复编写,方便线上配置修改。
- 业务相关配置的问题
- 业务相关配置众多,如登录超时时间、最大重试次数、订单超时时长、购物车商品数量上限等,不能写死在代码中,需放在配置文件。
- 配置文件修改配置虽无需重新编译打包,但需重启项目,影响用户体验和运维工作。
- 配置变更需重启服务的问题及解决方案
- 微服务和网关每次配置变更都需重启服务,这是核心问题。
- 配置管理服务可管理业务相关配置和网关路由配置,监听配置变更并推送消息,使微服务无需重启即可生效,实现配置热更新。
- 配置管理的核心功能及Nacos的作用
- 配置管理的两大核心功能为配置共享和避免配置更新后重启实现热更新。
- 之前使用的Nacos不仅具备注册中心功能,还能实现配置管理,无需学习新的技术。
-
背景介绍
- 微服务配置问题:微服务中存在如JDBC、日志、swagger等重复度高的配置,不适合在微服务中重复编写。
- 解决方案:将这些配置交给Nacos配置中心统一管理,实现微服务间配置共享,本节课学习利用Nacos实现配置共享,主要有添加共享配置到Nacos和微服务拉取配置两步。
-
添加共享配置到Nacos
- 确定共享配置内容:以购物车服务配置文件为例,其中服务端口和名称不重复,但JBDC连接参数(除数据库名)、mp配置、日志配置、swagger配置等多服务重复,将这些配置分批抽取,先处理JBDC和mp相关配置。
- 在Nacos中添加共享配置
- 在Nacos控制台配置管理菜单的配置列表点击加号添加新配置。
- 配置信息包括:
- Data ID:配置文件名称,如shareGDBCDEO用于共享GBDC配置,微服务获取共享配置需指定此名称。
- Group:数据分组,默认default group。
- 描述:对文件简单介绍,如GBDC共享配置文件。
- 文件格式:本次为yaml格式。
- 配置内容:粘贴相关配置并保留GBDC和mp相关内容,同时将可能变化的配置设为变量,如数据库名、服务端口、IP地址、用户名、密码等,可定义默认值。
- 添加其他共享配置:类似地,对日志配置(如share log em)和swagger配置(如share swagger em)进行操作,其中swagger配置中标题、描述可设变量和默认值,扫描包不写死。
-
微服务拉取配置
-
Spring Boot项目启动流程与问题:普通Spring Boot项目启动先读取application.yml完成spring application context初始化。但Spring Cloud项目引入配置管理后,启动时先尝试拉取Nacos配置完成spring cloud上下文环境初始化,再进行Spring Boot配置文件加载和上下文初始化,这导致项目启动时不知Nacos地址无法拉取配置的问题。
-
解决方案:创建bootstrap.yml文件
- 作用:引导配置文件,项目启动先读取它获取Nacos地址,解决拉取配置问题。
- 内容:主要由三部分组成。
- 服务名、application启动运行环境(可分dev、local等环境,需指定profile active)、Nacos地址。
- config file extension:指定共享配置文件后缀名,本次为yml。
- 共享配置文件名称:指定要拉取的共享配置文件名,如shareGDBCDEO等。
- 操作步骤:
-
引入依赖:
-
创建文件:复制粘贴并重命名为bootstrap.yml,修改内容,保留服务名、环境、Nacos地址,添加共享配置文件信息,同时在application.yml中去除已在bootstrap.yml或从Nacos拉取的配置(如服务名、环境、数据库NX地址、日志、NPD等),保留需自定义的变量(如HMDB.database、swagger相关的title、扫描包等)。
-
-
-
课程总结
- 核心步骤 :
- 将共享配置添加到Nacos管理。
- 在微服务内部拉取配置,包括引依赖(spring cloud starter alibaba nacos config和spring cloud starter bootstrap)和定义bootstrap.yml文件(指定服务名称、激活环境变量、Nacos地址、要拉取的共享配置名字)。
- 最终效果:实现微服务配置共享,简化微服务配置文件。
- 核心步骤 :
配置热更新
-
配置热更新概念与作用
- 概念:修改配置文件时,微服务无需重启使配置生效。
- 作用:部分配置与业务有关且可能变更,配置热更新可提升用户体验,避免因重启服务导致用户无法访问。
-
配置热更新文件名称格式
- 格式组成:包含微服务名(spring application name)、profile(spring active profile,可选)、文件后缀名(file extension)。
-
配置热更新的读取方式
- 方式一:使用configuration properties读取配置,配置文件中需有对应属性,配置变更时可热更新。
- 方式二:采用注解方式读取属性,需在类上加refresh scope注解标记。推荐使用方式一,原因是value注解方式获取属性已不常用,且方式二需额外学习新注解。
-
购物车服务配置热更新案例实操
- 需求:将购物车商品上限设置为配置文件属性,实现配置热更新。
- 操作步骤
-
在购物车服务中定义属性类,如CartProperties,添加@ConfigurationProperties注解并设置前缀,定义最大商品数量属性maxItems并注册成bean。
-
在业务代码中注入该属性,修改添加购物车逻辑,判断购物车数量是否超过maxItems属性值,超过则抛出异常。
-
在Nacos中添加配置文件,文件名格式为微服务名+profile(可选)+后缀名,指定属性值,如HM.cut.max-items=1,不指定profile则所有环境生效。
-
重启购物车服务,测试添加购物车功能,根据配置上限限制添加数量。修改Nacos中配置值为10并发布,再次测试添加购物车,验证热更新效果。
-
-
配置热更新实现步骤总结
- 在Nacos中定义与微服务名相关的配置文件,文件名格式为微服务名+profile(可选)+后缀名。
- 在微服务中使用configuration properties方式加载属性,配置变更时无需重启服务即可生效。