一文吃透 Nacos:从安装到微服务实战,替代 Eureka 真香

在微服务架构里,注册中心是服务治理的核心。随着 Eureka 2.0 闭源,阿里开源的 Nacos 凭借一站式服务发现、配置管理、动态 DNS 等能力,迅速成为国内微服务开发的首选方案。

这篇文章就基于实战课件,带你从安装、服务注册发现、负载均衡、健康检查、环境隔离、配置中心与 Eureka 对比,一次性学会 Nacos 全流程使用。


一、Nacos 是什么?

Nacos(Dynamic Naming and Configuration Service)是阿里开源的微服务注册中心 + 配置中心,定位是:更易于构建云原生应用的动态服务发现、配置管理和服务管理平台

核心亮点

  • 2018 年开源,对标 Eureka,Star 远超 Eureka

  • 一站式:注册中心 + 配置中心 + 服务管理

  • 支持 Java/Go/C++/Node.js/Python 等主流语言

  • 国内大厂广泛使用:蔚来、理想、中国移动、爱奇艺、虎牙等


二、Windows 单机安装 Nacos(2.2.3 稳定版)

学习阶段直接用单机模式,步骤极简:

1. 下载安装包

官方稳定版:2.2.3
下载地址:https://github.com/alibaba/nacos/releases/tag/2.2.3

2. 解压并修改启动模式

  • 解压到非中文路径

  • 打开 /bin/startup\.cmd

  • 找到 set MODE=\&\#34;cluster\&\#34;,改为:

    set MODE="standalone"
    

3. 启动 Nacos

双击 startup\.cmd,看到:

nacos is starting with standalone
Tomcat started on port(s): 8848 (http)
Nacos started successfully in stand alone mode

访问控制台:http://127.0.0.1:8848/nacos
默认账号密码:nacos/nacos

4. 常见问题

  • 集群模式报错:必须改成 standalone

  • 8848 端口冲突

    • 杀进程:netstat \-ano\|findstr \&\#34;8848\&\#34;taskkill /pid xxx \-f

    • 改端口:/conf/application\.propertiesserver\.port=新端口


三、Spring Cloud 整合 Nacos:服务注册与发现

Nacos 完全兼容 Spring Cloud 规范,替换 Eureka 成本极低。

1. 引入依赖

父工程管理版本
<properties>
    <spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>${spring-cloud-alibaba.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
</dependencyManagement>
微服务引入 Nacos 与负载均衡
<!-- 服务注册发现 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 负载均衡 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

2. 配置 Nacos 地址

spring:
  application:
    name: product-service # 服务名
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 # Nacos 地址

3. 开启负载均衡

@Configuration
public class BeanConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

4. 远程调用(服务名替代 IP)

String url = "http://product-service/product/" + orderInfo.getProductId();
ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);

启动服务后,在 Nacos 控制台服务列表即可看到注册成功的服务。


四、Nacos 负载均衡:权重、集群优先、服务下线

Nacos 提供比默认负载均衡更强大的流量控制能力。

1. 服务手动上下线

控制台:服务管理 → 服务列表 → 详情 → 下线
下线后流量不再分发,恢复上线即可重新接收请求。

2. 权重配置(按权重分发流量)

  1. 编辑实例 → 修改权重(默认 1)

  2. 开启 Nacos 负载均衡:

    spring:
      cloud:
        loadbalancer:
          nacos:
            enabled: true
    

3. 同集群优先访问(同城 / 同机房优先)

  • 给服务配置集群名:

    spring.cloud.nacos.discovery.cluster-name=SH # 上海
    
  • 启动参数指定不同集群:

    -Dserver.port=9091 -Dspring.cloud.nacos.discovery.cluster-name=BJ
    
  • 同集群服务优先调用,跨集群只做兜底。


五、Nacos 健康检查:临时实例 vs 永久实例

Nacos 有两种健康检查机制,和实例类型强绑定:

1. 实例类型

  • 临时实例(默认):宕机超时而被剔除,用客户端心跳上报

  • 非临时实例(永久实例):宕机不删除,用服务端反向探测

2. 配置永久实例

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 永久实例

3. 常见问题

  • 实例类型不能直接改:停 Nacos → 删除 /data/protocol/raft → 重启

  • 服务正常但健康检查失败:检查网络 / 端口 / 防火墙


六、环境隔离:Namespace 命名空间

企业必备:开发 / 测试 / 生产环境互相隔离

1. 控制台创建 Namespace

  • 左侧:命名空间 → 新建

  • 生成唯一 ID,如:51152a13\-7911\-49e3\-bbdc\-16fd5670a257

2. 微服务指定 Namespace

spring:
  cloud:
    nacos:
      discovery:
        namespace: 51152a13-7911-49e3-bbdc-16fd5670a257

不同 Namespace 的服务不可见、不可调用


七、Nacos 配置中心:统一管理、热更新

微服务配置散落在各个项目,修改要重启?Nacos 配置中心一键解决。

1. 引入依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- Spring Cloud 2020+ 必须加 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

2. bootstrap.yml 配置(优先加载)

spring:
  application:
    name: product-service # 必须和 Nacos DataID 一致
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        namespace: 51152a13-7911-49e3-bbdc-16fd5670a257

3. 开启配置热更新

@RestController
@RefreshScope // 配置自动刷新
@RequestMapping("/config")
public class NacosController {
    @Value("${nacos.test.num:0}")
    private Integer nacosNum;

    @GetMapping("/get")
    public Integer get() {
        return nacosNum;
    }
}

4. DataID 规则(多环境兼容)

${prefix}-${spring.profiles.active}.${file-extension}
  • 优先级:dev 环境配置 &gt; 默认配置

  • 支持 properties / yaml


八、Linux 部署微服务 + Nacos

  1. 打包微服务为 jar

  2. 上传服务器,启动 Nacos:

    bash startup.sh -m standalone
    
  3. 后台启动服务:

    nohup java -jar product-service.jar --server.port=9090 > logs/product.log &
    

九、Nacos vs Eureka:到底强在哪?

对比项 Eureka Nacos
功能 仅注册中心 注册中心 + 配置中心 + 服务管理
CAP 原则 AP 可切换 AP/CP,默认 AP
健康检查 客户端心跳 临时实例心跳 / 永久实例探测
服务更新 客户端定时拉取 服务端实时推送
负载均衡 基础轮询 权重、集群优先、同机房优先
社区与生态 2.0 闭源 活跃更新,国内主流

一句话总结:Nacos 是 Eureka 的全面升级版,一站式解决微服务注册、配置、流量管控问题。


十、总结

Nacos 作为 Spring Cloud Alibaba 核心组件,安装简单、接入平滑、功能强大,完全可以替代 Eureka 成为微服务架构的标配注册中心与配置中心。

本文覆盖:

  • Nacos 单机安装与排错

  • Spring Cloud 服务注册发现

  • 权重 / 集群负载均衡

  • 健康检查与实例类型

  • Namespace 环境隔离

  • 配置中心热更新

  • 与 Eureka 对比

掌握这些,微服务服务治理基本就稳了。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐