nacos配置管理改造

为什么需要配置中心

在单体应用或小规模系统时,通常把配置写在项目里的application.propertitesconfig.yml 文件里,随代码一起打包部署。

会遇到问题:

  • 修改配置需要重启
  • 环境混乱,开发、测试、预发、生产环境各有不同的配置,经常要在不同分支或不同文件里改来改去,一不小心就把测试环境的配置发到了生产,就是严重事故
  • 配置散落各处

当系统拆分为微服务之后,上述问题会演变为灾难:

  • 管理失控:100个服务就有100份配置文件,如果数据库密码需要定期更换,得手动改100次,漏掉一个就导致服务宕机
  • 动态伸缩难:微服务实例会根据流量自动扩缩容,新启动的容器必须能立即拉取到最新的配置,而不能依赖容器镜像里写死的旧配置

因此使用配置中心解决了上述问题:

  • 动态生效:配置中心允许在不重启应用的情况下,实时推送配置变更。例如当发现线上功能有问题,可以立即通过配置中心关掉某个功能开关,或者调高日志级别,几秒钟内全网生效,无需发版
  • 集中管理与权限审计:所有服务的配置都存放在一个统一的web控制台里,可以一目了然的看到订单服务有哪些配置,支付服务有哪些配置,同时可以设置权限,谁改了配置,什么时候改的,改了什么都留有审计日志,出了问题便于追溯
  • 环境隔离与版本控制:配置中心通常支持命令空间Namespace或分组,可以轻松管理dev, test, prod三套环境,同一份配置ID对应不同的值,应用启动时只需指定环境标签即可,彻底杜绝改错环境的问题,并且配置变更支持版本回滚,改错了可以一键恢复
  • 服务感知与健康检查:配置中心通常和服务注册中心配合。当配置变更,能感知到哪些服务实例在运行,并精准推送。如果某个客户端没收到配置,配置中心还能提供配置拉取接口,确保客户端主动轮询,保证最终一致性。

现代配置中心Apollo, Nacos, Consul已经进化成了动态配置管理平台,承载了更多职责:

  • 灰度发布:只让10%的测试用户先应用新配置,没问题再全量推送
  • 依赖解耦:运维和开发分工更清晰,开发只写代码占位符${mysql.host},运维在配置中心填具体的IP,双方互不干扰

什么是Nacos

Nacos支持几乎所有主流类型的服务的发现、配置和管理。

  • Kubernetes Service
  • gRPC, Dubbo RPC Service
  • Spring Cloud RESTFul Service

Nacos快速开始

Nacos依赖Java环境来运行,

将Spring Cloud微服务接入Nacos进行配置管理,主要涉及服务端准备、客户端依赖引入、配置文件迁移以及代码动态刷新四个步骤。

  1. 启动Nacos Server
  2. 在各个微服务模块的pom.xml这种,添加nacos配置中心的starter依赖。

引入nacos config依赖,即nacos 配置中心的starter依赖:

在项目根pom.xml中引入,这样各个服务也能从根pom中拿到

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 调整配置文件
    每个服务都需要引入spring.config.import,导入nacos配置,不再推荐使用bootstrap.yml,

本地保留application.yml,只放启动必需的配置,

例如用户服务的application.yml保留以下内容;注意添加服务发现的地址,配置中心的地址,

yml 复制代码
spring:
  application:
    name: imagecore-backend-user-service
  profiles:
    active: tencent
  cloud:
    nacos:
      discovery:
        server-addr: xxx:8848
      config:
        server-addr: xx:8848
        file-extension: yml
  config:
    import:
      - nacos:imagecore-backend-user-service
      - nacos:imagecore-backend-user-service-tencent
  1. 迁移配置文件到nacos控制台

在nacos控制台中,进入配置管理------》配置列表,

点击新建配置,Data ID通常命名为your-service-name.yml,与配置中的一致,Group保持默认的DEFAULT-GROUP,配置格式选择YAML,

注意DataID也必须和import里面的一样imagecore-backend-user-service-tencent

同理,picture-service, space-service也是,

这样就修改成功了。

相关推荐
XWalnut2 小时前
LeetCode刷题 day29
java·算法·leetcode
4154112 小时前
MyBatis-Plus + PostGIS 实战(1.1):Geometry 字段在 Swagger 中的优雅展示
java·mybatis·postgis
极客先躯3 小时前
高级java每日一道面试题-2026年04月05日-实战篇[Docker]-如何排查容器 OOM 的问题?
java·运维·docker·容器·内存溢出·高级面试
带娃的IT创业者3 小时前
监控并非安全:当隐私成为技术的祭品
java·开发语言·安全·数据安全·监控·隐私保护·加密技术
叩码以求索3 小时前
使用next数组加速匹配过程
java·数据结构·算法
余额瞒着我当琳4 小时前
C++ 基础核心概念精讲:引用、内联与 nullptr
java·开发语言·c++
再玩一会儿看代码4 小时前
JUnit 测试框架详解:从实际开发、业务测试到 Java 面试高频问题
java·经验分享·笔记·junit·面试
yxlalm5 小时前
2.java秒杀项目第二课-后端登录功能
java·开发语言