楼主: 无味无味
33 0

Nacos配置管理 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-7-30
最后登录
2018-7-30

楼主
无味无味 发表于 2025-11-17 15:41:16 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

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

新服务继承现有共享配置,只需添加专属配置

网关路由动态配置,支持服务动态扩缩容

这套配置管理体系为微服务架构提供了标准化、可维护、易扩展的配置解决方案。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:cos NAC Application Description Correlated
相关内容:Nacos配置管理

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-20 06:25