一、Nacos核心两大能力
- 服务注册&发现:替代Eureka、Consul,微服务自动注册、健康检测、负载均衡、优雅上下线;
- 分布式配置中心:统一托管配置、多环境隔离、配置动态下发刷新,无需重启服务,替代Spring Cloud Config;
一体化Web管理控制台,国产微服务标配组件。
二、Windows单机部署Nacos
1、下载
官网下载
Releases下载压缩包:nacos-x.x.x.zip
解压路径不能含中文、空格、括号,示例:D:\soft\nacos-2.3.2
2、单机模式启动
cmd进入nacos/bin目录执行:
startup.cmd -m standalone日志输出Nacos started successfully in stand alone mode即为启动成功。
3、访问后台控制台
访问地址:http://localhost:8848/nacos
默认账号:nacos,密码:nacos
端口说明
- 8848:HTTP控制台、服务注册端口
- 9848:gRPC内部通信端口(2.x版本新增)
停止服务
shutdown.cmd持久化补充
默认内置Derby嵌入式数据库,重启后配置、服务数据全部丢失;
- 新建MySQL库,执行
conf/nacos-mysql.sql初始化表; - 修改
conf/application.properties,填入MySQL连接地址、账号密码; - 重启Nacos,数据持久化到MySQL,重启不丢失。
三、注册中心
服务注册、远程调用
1、Maven依赖
父工程已管理SpringCloud Alibaba版本,子模块引入:
<!-- Nacos 服务注册发现 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>2、生产者配置 application.yml
spring:application:name:order-service# 注册到Nacos的服务唯一标识cloud:nacos:discovery:server-addr:127.0.0.1:88483、启动类开启注册
@SpringBootApplication@EnableDiscoveryClientpublicclassOrderApplication{publicstaticvoidmain(String[]args){SpringApplication.run(OrderApplication.class,args);}}4、验证注册结果
Nacos控制台 → 服务管理 → 服务列表,可看到order-service,实例状态为UP健康。
5、消费者调用(负载均衡)
消费者同样引入discovery依赖、配置Nacos地址、添加@EnableDiscoveryClient。
① RestTemplate开启负载均衡
@Bean@LoadBalancedpublicRestTemplaterestTemplate(){returnnewRestTemplate();}② 调用(直接写服务名,不用IP+端口)
// lb:// 开启负载均衡,自动从Nacos拉取实例列表Stringurl="http://order-service/order/get/1";Stringres=restTemplate.getForObject(url,String.class);6、常用运维操作
- 权重调整:编辑实例权重0~100,权重越高流量越大;权重=0,不再接收新请求,优雅下线;
- 临时实例/持久实例:临时实例服务下线自动剔除;持久实例手动删除。
四、配置中心
1、新增依赖
<!-- Nacos配置中心 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>2.x 新版无需引入bootstrap启动器,不需要bootstrap.yml,全部配置写在
application.yml。
2、核心语法:spring.config.import
spring:application:name:order-serviceprofiles:active:dev# 新版核心配置:导入Nacos远程配置config:import:# optional:拉取配置失败不阻塞本地启动;refreshEnabled=true 开启动态刷新-optional:nacos:order-service-dev.yml?refreshEnabled=truecloud:nacos:server-addr:127.0.0.1:8848config:namespace:publicgroup:DEFAULT_GROUP语法拆解:
optional:可选拉取,本地调试网络不通也能正常启动;去掉则启动失败;order-service-dev.yml严格对应Nacos后台创建的Data ID;refreshEnabled=true:后台修改配置发布后,应用无需重启自动生效。
3、Nacos后台创建配置
配置管理 → 配置列表 → 新建配置:
- Data ID:
order-service-dev.yml - 配置格式:YAML
- 配置内容:
custom:payType:aliPaytimeout:30004、代码读取配置(自动动态刷新)
方式1:@Value
@Value("${custom.payType}")privateStringpayType;方式2:@ConfigurationProperties(批量绑定)
@Component@ConfigurationProperties(prefix="custom")publicclassCustomConfig{privateStringpayType;privateIntegertimeout;}5、多配置、共享配置写法
多个公共配置、业务私有配置同时导入:
spring:config:import:# 业务独有配置-optional:nacos:order-service-dev.yml?refreshEnabled=true# 全局公共共享配置-optional:nacos:common-dev.yml?group=COMMON&refreshEnabled=true五、Nacos多环境隔离方案(Namespace+Group)
1、Namespace命名空间(环境级隔离,推荐)
dev、test、prod三套环境互相完全隔离,服务、配置互不互通。
- 控制台:命名空间 → 新建命名空间,生成唯一namespace ID;
- 客户端指定namespace:
spring.cloud.nacos.discovery.namespace:dev-xxxx-uuidspring.cloud.nacos.config.namespace:dev-xxxx-uuid2、Group分组(同环境业务线隔离)
同一命名空间内,按订单、用户、支付业务分组区分,默认DEFAULT_GROUP。
spring.cloud.nacos.config.group:ORDER_GROUP六、Gateway网关整合Nacos动态路由
网关依赖discovery,无需硬编码后端IP,通过服务名负载均衡转发:
spring:cloud:gateway:routes:-id:order-routeuri:lb://order-service# lb代表Nacos负载均衡predicates:-Path=/order/**七、高频踩坑总结
- Windows启动必须加
-m standalone,默认集群模式启动报错; - 新版配置中心不要写bootstrap.yml,必须用
spring.config.import语法; - 动态配置不刷新:检查import拼接
refreshEnabled=true; - 服务注册不上:核对server-addr、namespace、group完全一致,服务名不要带下划线;
- Derby内存库重启丢失数据:生产务必切换MySQL持久化。