改了 Nacos 上的配置,服务不需要重启就能生效。这背后是长轮询、MD5 对比和 Spring Cloud 的 RefreshScope 在起作用。

一、配置中心的核心能力

  • 1.1 配置集中管理——告别每个服务一个 application.yml
  • 1.2 动态刷新——运行时修改配置
  • 1.3 版本管理——回滚历史配置
  • 1.4 灰度发布——按 IP/标签下发配置

二、Nacos 客户端的配置获取

  • 2.1 NacosPropertySourceLocator.locate()——启动时加载配置
  • 2.2 本地快照——snapshot-tenant/group/dataId 文件
  • 2.3 启动优先级——本地快照 > Nacos Server
  • 2.4 防止 Nacos 不可用时服务无法启动

三、长轮询(Long Polling)机制

  • 3.1 短轮询的缺点——频繁请求、浪费资源
  • 3.2 长轮询的原理——Hold 住请求,有变更再返回
  • 3.3 Nacos 的长轮询实现——30 秒超时 + ClientLongPolling
  • 3.4 MD5 对比——配置内容未变则不推

四、Spring 的配置刷新

  • 4.1 @RefreshScope 的作用
  • 4.2 RefreshScope.refresh()——销毁并重建 Bean
  • 4.3 @Value 的热更新——RefreshScope 标注的类
  • 4.4 @ConfigurationProperties 的热更新——自动刷新
  • 4.5 EnvironmentChangeEvent 事件的发布与监听

五、灰度配置发布

  • 5.1 基于 IP 的灰度——配置灰度到指定机器
  • 5.2 基于标签的灰度——结合 Nacos 服务发现的元数据
  • 5.3 Beta 发布——先验证再全量

六、生产环境实践

  • 6.1 namespace 的规划——多环境隔离
  • 6.2 敏感配置加密——Jasypt 集成
  • 6.3 配置变更审计——谁在什么时间改了什么
  • 6.4 配置变更通知——钉钉/企业微信

七、总结

  • 配置中心的三驾马车:长轮询 + MD5 + RefreshScope
  • 与 Apollo / Spring Cloud Config 的对比