Skip to main content

Nacos-基础

一、了解Nacos

通过注册中心,服务之间无需关心彼此的物理地址,从而实现高内聚低耦合的服务通信模式。建议团队统一使用 Nacos 管理所有服务注册,统一接入标准远程调用方式(如 Feign),提升服务治理和维护能力。

二、核心概念说明

1. Nacos

Nacos(Naming and Configuration Service)是阿里巴巴开源的服务注册中心与配置中心。

  • 注册中心:用于服务注册与发现。
  • 配置中心:用于集中化配置管理。

2. 注册中心的作用

  • 维护系统内所有服务的地址与元数据;
  • 实现服务间动态发现;
  • 实现服务弹性扩缩容的基础;
  • 支持负载均衡与故障剔除。

三、服务注册与发现流程

✅ 服务注册

每个微服务启动时,会将以下信息注册到 Nacos:

  • 服务名(如 product-service
  • 实例地址(IP、端口)
  • 元数据(环境、版本等)
  • 心跳信息(健康检查)

✅ 服务发现与调用

调用服务的流程如下:

订单服务启动

向 Nacos 注册自身为 order-service

订单服务准备调用商品服务(product-service)

从 Nacos 获取 product-service 的实例列表(如多个 IP + 端口)

选择一个实例(通过 Ribbon/LoadBalancer/自定义策略)

发起远程调用(HTTP、Feign、gRPC 等)

四、示例调用代码(Spring Cloud Alibaba + Feign)

1. 商品服务注册配置(product-service)

spring:
application:
name: product-service
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848

2. 订单服务调用商品服务(Feign方式)

@FeignClient("product-service")
public interface ProductClient {
@GetMapping("/product/{id}")
ProductDTO getProduct(@PathVariable("id") Long id);
}
@RestController
public class OrderController {

@Autowired
private ProductClient productClient;

@GetMapping("/order/create")
public OrderDTO createOrder(Long productId) {
ProductDTO product = productClient.getProduct(productId);
// 业务逻辑处理
return new OrderDTO(product);
}
}

五、注意事项

项目说明
服务名必须一致@FeignClient("xxx") 的名称要与实际服务注册名一致
避免硬编码地址禁止写死服务 IP 和端口,应统一通过服务名调用
环境隔离使用命名空间、Group、metadata 控制跨环境调用风险
健康检查配置推荐开启服务的健康检查机制,保障注册中心数据正确性
服务降级容错配合 Sentinel 实现服务熔断、降级保护

六、推荐依赖版本

组件建议版本
Spring Cloud Alibaba2021.x / 2022.x
Nacos Server2.x
Nacos Client与 Server 版本匹配
FeignSpring Cloud 原生支持
Ribbon 或 Spring Cloud LoadBalancer推荐使用 Spring Cloud LoadBalancer