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 Alibaba | 2021.x / 2022.x |
Nacos Server | 2.x |
Nacos Client | 与 Server 版本匹配 |
Feign | Spring Cloud 原生支持 |
Ribbon 或 Spring Cloud LoadBalancer | 推荐使用 Spring Cloud LoadBalancer |