Nacos配置管理
一、 核心思想:配置分离与分层
该策略的关键在于将配置进行有效的分割和逻辑层次划分,主要分为两类:
共享配置:以
shared- 开头的配置,由多个微服务共同利用。专属配置:以具体服务名称(如
cart-service)命名的配置,仅对特定的服务产生效果。
这种方法的优点包括:
高维护性:修改共用组件(例如数据库、日志等级)只需更新单一的共享配置文件,所有服务会自动生效。
清晰的职责分配:服务特有的配置单独管理,防止互相影响。
减少冗余:避免了在各服务配置文件中重复定义相同内容的情况。
二、 配置文件详解
1. 共享配置详情
shared-jdbc.yaml - 数据库共享配置
spring:
datasource:
url: jdbc:mysql://${hm.db.host:192.168.150.101}:${hm.db.port:3306}/${hm.db.database}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: ${hm.db.un:root} # 采用变量占位符,默认值为root
password: ${hm.db.pw:123} # 采用变量占位符,默认值为123
mybatis-plus:
configuration:
default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
global-config:
db-config:
update-strategy: not_null # 更新时跳过null字段
id-type: auto # 自动增长主键
特点:
使用变量占位符
${} 支持多环境配置包含MyBatis-Plus全局设置
数据库连接参数优化(字符集、时区等)
shared-log.yaml - 日志共享配置
logging:
level:
com.hmall: debug # 特定项目包的日志等级
pattern:
dateformat: HH:mm:ss:SSS # 统一的时间格式
file:
path: "logs/${spring.application.name}" # 按服务名称分目录存储
特点:
统一的日志格式和时间格式
根据微服务名称自动建立日志目录
支持动态获取应用程序名称
shared-swagger.yaml - API文档配置
knife4j:
enable: true # 激活Knife4j(Swagger增强版)
openapi:
title: ${hm.swagger.title:黑马商城接口文档}
description: ${hm.swagger.description:黑马商城接口文档}
email: ${hm.swagger.email:zhanghuyi@itcast.cn}
concat: ${hm.swagger.concat:虎哥}
url: https://www.itcast.cn
version: v1.0.0
group:
default:
group-name: default
api-rule: package
api-rule-resources:
- ${hm.swagger.package} # 动态配置扫描包路径
特点:
使用Knife4j作为Swagger增强界面
完整的API文档信息配置
支持包扫描路径的动态配置
shared-seata.yaml - 分布式事务配置
seata:
registry: # TC服务注册中心配置
type: nacos
nacos:
server-addr: 192.168.150.101:8848 # nacos地址
namespace: ""
group: DEFAULT_GROUP
application: seata-server # seata服务名称
username: nacos
password: nacos
tx-service-group: hmall # 事务组名称
service:
vgroup-mapping: # 事务组与TC集群映射关系
hmall: "default"
特点:
配置Seata与Nacos服务发现的集成
定义事务组名称和集群映射
包含认证信息
shared-mq.yaml - 消息队列配置
spring:
rabbitmq:
host: 192.168.150.101
port: 5672
virtual-host: /hmall
username: hmall
password: 123
publisher-confirm-type: correlated # 发布确认机制
publisher-returns: true # 启用 return 机制
特点:
RabbitMQ 连接池配置
启用消息确认机制,提升可靠性
虚拟主机隔离
2. 服务专属配置
cart-service.yaml - 购物车服务专属配置
hm:
cart:
maxAmount: 10 # 购物车商品数量上限-业务参数
特点:
仅包含该服务特有的业务参数
配置简洁,职责单一
支持动态刷新
3. 网关路由配置
gateway-routes.json - 网关路由规则
[
{
"id": "item",
"predicates": [{
"name": "Path",
"args": {"_genkey_0":"/items/**", "_genkey_1":"/search/**"}
}],
"filters": [],
"uri": "lb://item-service"
},
{
"id": "cart",
"predicates": [{
"name": "Path",
"args": {"_genkey_0":"/carts/**"}
}],
"filters": [],
"uri": "lb://cart-service"
},
{
"id": "user",
"predicates": [{
"name": "Path",
"args": {"_genkey_0":"/users/**", "_genkey_1":"/addresses/**"}
}],
"filters": [],
"uri": "lb://user-service"
},
{
"id": "trade",
"predicates": [{
"name": "Path",
"args": {"_genkey_0":"/orders/**"}
}],
"filters": [],
"uri": "lb://trade-service"
},
{
"id": "pay",
"predicates": [{
"name": "Path",
"args": {"_genkey_0":"/pay-orders/**"}
}],
"filters": [],
"uri": "lb://pay-service"
}
]
路由规则说明:
Path 匹配: 根据请求路径路由至对应服务
负载均衡: 使用
lb:// 前缀实现服务发现和负载均衡
路由 ID: 唯一标识每个路由规则
三、 配置的加载与优先级
在微服务中,通过 Nacos 配置管理的加载机制如下:
服务启动: 例如
cart-service 启动时,会根据 spring.application.name 和 spring.cloud.nacos.config.shared-configs 等配置从 Nacos 服务器获取配置。
加载顺序: 通常会先加载共享配置(
shared-*.yaml),再加载专属配置(cart-service.yaml)。
优先级规则: 后加载的配置将覆盖先加载的相同属性。因此:
cart-service.yaml 中的配置具有最高优先级。
如果某个属性(如日志级别)在
shared-log.yaml 和 cart-service.yaml 中都已定义,则以 cart-service.yaml 中的为准。这实现了“通用配置共享,特殊配置自定义”的灵活性。
示例:
shared-log.yaml 中定义全局日志级别为 INFO。
cart-service.yaml 中定义日志级别为 DEBUG。
最终,购物车服务的日志级别将是
DEBUG,而其他服务仍为 INFO。
四、多环境支持策略
1. 变量占位符
url: jdbc:mysql://${hm.db.host:192.168.150.101}:${hm.db.port:3306}/hmall
开发、测试、生产环境通过不同的变量值区分
支持默认值,提高配置容错性
2. 命名空间(Namespace)隔离
不同环境使用不同的 Namespace
实现环境间的彻底隔离
3. 配置分组(Group)
可按业务线或项目进行分组管理
更细粒度的配置控制
五、最佳实践总结
配置设计原则
单一职责: 每个配置文件职责清晰
环境无关: 通过占位符支持多环境
敏感信息隔离: 密码等敏感信息可单独管理
运维优势
动态刷新: 修改配置无需重启服务
版本管理: Nacos 支持配置版本历史和回滚
权限控制: 可针对不同配置设置不同操作权限
扩展性考虑
新的共享组件只需添加新的
shared-*.yaml
新服务继承现有共享配置,只需添加专属配置
网关路由动态配置,支持服务动态扩缩容
这套配置管理体系为微服务架构提供了标准化、可维护、易扩展的配置解决方案。


雷达卡


京公网安备 11010802022788号







