# 02.微服务-Nacos

# 1.Nacos介绍

定义:一个更易于构建云原生应用的动态服务发现、服务配置和服务管理平台

Nacos的关键特性包括:

  • 服务发现和服务健康监测

  • 动态配置服务

  • 动态DNS服务

  • 服务及其元数据管理

# 2.注册中心演变过程

第一阶段,直接用restTemplate远程调用需要传递url参数,每次更新地址都需要修改,极其不方便

第二阶段,使用注册表将url存到数据库中,然后本地拉取,但是不方便负载均衡

第三阶段,nginx实现负载均衡,在nginx中维护服务,但是没有监控机制,不知道服务什么时候挂掉了,而且它也极其不容易维护,比如说这个服务进行负载均衡,但是大促销或者秒杀之后,不需要用这个服务了,频繁操作会比较麻烦

第四阶段,nacos注册中心,有监控(心跳机制:定时任务,超时就挂,挂了之后超时剔除),可以实现负载均衡,直接在nacos配置ip+不同端口。

# 3.注册中心核心功能

  • 服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中

  • 服务心跳:在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务处于可用状态,防止被剔除。5s发送一次心跳

  • 服务同步:Nacos Server集群之间会互相同步服务实例,确保消息一致性

  • 服务发现:Nacos Client在调用服务提供者的服务时,会发送一个REST 请求给Nacos Server,获取上面注册的服务清单,并缓存到本地,同时开启一个定时任务拉去服务器最新的注册表更新到本地缓存

  • 服务健康检查:Nacos Server开启一个定时任务来检查服务健康状况,超过15s为回复则更新他的健康状况为false,如果超过30s就剔除

# 4.注册中心对比

C-一致性,A-可用性,P-分区性

一致性和可用性不能同时实现,因为数据如果放一起,当出现网络断开时,可能会将一个集群中的三个服务A、B、C分成左右两个半区,A和B、C,B、C结点在右边超过半数所以可以读写,但是A结点不足半数所以不可用

CP:将服务放到一个集群中多实例部署

AP:将单个服务放到单个实例中

对比项 Nacos Eureka Consul Zookeeper
一致性协议 CP+AP AP CP CP
健康检查 TCP/HTTP/MYSQL/Client Beat Client Beat TCP/HTTP/gRPC/Cmd Keep Alive
负载均衡策略 权重 /metadata/Selector Ribbon Fabio
雪崩保护
自动注销实例 支持 支持 支持 支持
访问协议 HTTP/DNS HTTP HTTP/DNS TCP
监听支持 支持 支持 支持 支持
多数据中心 支持 支持 支持 不支持
跨注册中心同步 支持 不支持 支持 不支持
SpringCloud 集成 支持 支持 支持 支持
Dubbo 集成 支持 不支持 支持 支持
K8S 集成 支持 不支持 支持 不支持

# 5.基础配置

spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 47.94.9.59:8848
      discovery:
        username: nacos
        password: 2eb4e10f
1
2
3
4
5
6
7
8
9

将order-service注册到nacos服务中心

外部调用就可以根据名字调用

@RequestMapping("/add")
public String add(){
    System.out.println("下单成功");
    String msg = restTemplate.getForObject("http://stock-service/stock/deduct", String.class);
    return "hello world"+msg;
}
1
2
3
4
5
6

注意要在注册rest的时候加上负载均衡器,否则会找不到,高版本已经放弃了ribbon的负载均衡器(之前nacos包自带),需单独引用

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
1
2
3
4

# 6.nacos配置项

Nacos 概念 | Nacos 官网 (opens new window)

最近更新: 9/19/2026, 1:27:08 PM
编程NOTE   |