当前位置: 首页 > news >正文

Nacos 配置信息的发布流程是怎样的?服务端是如何校验和处理这些信息的?

在这里插入图片描述

Nacos 配置发布的流程,以及服务端如何校验和处理这些请求,可以分为以下几个步骤:

1. 客户端发起配置发布请求:

  • 客户端(例如,使用 NacosConfigClient 的 Spring Boot 应用)构建一个配置发布请求。
  • 请求中包含以下关键信息:
    • dataId: 配置 ID。
    • groupId: 配置分组。
    • tenant: 租户 ID(命名空间)。
    • content: 配置内容。
    • type: 配置类型(可选,例如 properties, yaml, json)。
    • srcUser: 操作用户(可选)。
    • srcIp: 操作 IP(可选)。
    • appName: 应用名(可选)
  • 客户端通过 HTTP POST 请求将配置发布请求发送到 Nacos Server。 请求的 URL 通常是 /nacos/v1/cs/configs

2. 服务端接收请求 (ConfigController):

  • Nacos Server 的 ConfigController 接收到配置发布请求。
  • ConfigController 会根据请求的 URL 和 HTTP 方法,调用相应的处理方法(例如 publishConfig)。

3. 服务端初步校验:

  • 权限校验:

    • 如果启用了 Nacos 的权限控制,会检查当前用户是否有权限发布配置。
    • 权限校验基于 Nacos 的用户、角色和权限体系。
  • 参数校验:

    • 检查请求参数是否完整、合法,例如:
      • dataIdgroupIdcontent 是否为空。
      • dataIdgroupIdtenant 的长度是否超过限制。
      • type 是否为支持的类型。
  • 限流:

  • 根据配置的限流规则,对请求进行限流处理,防止恶意请求或突发流量压垮服务器

4. 服务端核心处理逻辑 (ConfigService):

  • ConfigController 会调用 ConfigService 的相应方法(例如 publishConfig)来处理配置发布请求。

  • 数据转换:

    • 将请求参数转换为内部的数据模型。
  • 查询旧配置 (可选):

    • 根据 dataIdgroupIdtenant 查询数据库(例如 config_info 表),获取旧的配置信息(如果存在)。
    • 获取旧配置的 MD5 值,用于后续比较。
  • MD5 计算:

    • 计算新配置内容的 MD5 值。
  • 配置内容比较 (可选):

    • 如果存在旧配置,将新配置的 MD5 值与旧配置的 MD5 值进行比较。
    • 如果 MD5 值相同,说明配置内容没有变化,可以选择不更新数据库(根据配置决定)。
  • 数据持久化:

    • 如果配置内容发生变化(或强制更新),将新的配置信息保存到数据库(config_info 表)。
    • 如果启用了历史版本功能, 会将旧版本的配置信息保存到 his_config_info 表, 并记录操作类型为 U (更新) 或 I(插入)。

5. 配置变更通知 (异步):

  • 本地事件: 配置发布成功后,ConfigService 会发布一个本地事件(ConfigDataChangeEvent)。
  • 异步任务: Nacos 的事件监听器会监听到 ConfigDataChangeEvent 事件, 并将通知任务添加到异步任务队列。
  • 长轮询/推送: Nacos Server 通过长轮询机制 或 gRPC 推送,将配置变更通知发送给所有订阅了该配置的客户端。
    • 通知中包含 dataIdgroupIdtenant 和新的 MD5 值。
  • 客户端更新: 客户端收到配置变更通知后,会重新拉取配置,并更新本地缓存。

6. 返回响应:

  • Nacos Server 向客户端返回配置发布的响应结果。
  • 响应中包含操作是否成功的信息。

总结 (服务端校验和处理):

  1. 接收请求: ConfigController 接收配置发布请求。
  2. 初步校验: 进行权限校验、参数校验、限流。
  3. 核心处理: ConfigService 处理配置发布逻辑:
    • 数据转换。
    • 查询旧配置(可选)。
    • 计算 MD5。
    • 配置内容比较(可选)。
    • 数据持久化(更新 config_info 表,可能插入 his_config_info 表)。
  4. 变更通知: 通过本地事件和异步任务,触发配置变更通知。
  5. 长轮询/推送: Nacos Server 通过长轮询 或 gRPC 将变更通知推送到客户端。
  6. 返回响应: 向客户端返回操作结果。

相关文章:

  • 什么是SAQ评级?SAQ评级的好处?SAQ评级的意义
  • 第七章:OSPF
  • Stable Diffusion|Ai赋能电商 Inpaint Anything
  • ideal自动生成类图的方法
  • 锁策略--
  • 【Unity网络编程知识】FTP学习
  • JavaScript基础-常见网页特效案例
  • 【Linux】进程通信
  • NVIDIA Jetson Orin Nano 8G 开发板开箱测评:边缘AI设备的性价比之选
  • 【Easylive】saveVideoInfo 方法详细解析
  • 大模型专题10 —LangGraph高级教程:构建支持网页搜索+人工干预的可追溯对话系统
  • ELK 通过 logstash 收集单个/多个日志文件
  • GaussDB(for PostgreSQL) 存储引擎:ASTORE 与 USTORE 详细对比
  • KTransformer:国产高性能大模型加载工具使用指南
  • WindowsPE文件格式入门04.导入表
  • Spring基础一(IoC、Spring配置)
  • Oracle数据库数据编程SQL<3.7 PL/SQL 触发器(Trigger)>
  • Modbus TCP转profibusDP网关接防撞雷达快速配置
  • 【TVM教程】使用 TVMC Micro 执行微模型
  • [C++]C++11(上)
  • 阳光保险拟设立私募证券投资基金,总规模200亿元
  • 上海老字号卖黄金,与动漫IP联名两周销售额近亿元
  • 巴菲特最新调仓:一季度大幅抛售银行股,再现保密仓位
  • 梅花奖在上海|话剧《主角》:艺术与人生的交错
  • 专家:家长要以身作则,孩子是模仿者学习者有时也是评判者
  • 中国证券业协会修订发布《证券纠纷调解规则》