Nacos 简介

Nacos 是一个动态服务发现、配置管理和服务管理平台,支持微服务架构中的服务注册与发现、配置管理、服务健康监测等功能。其核心特点包括高可用性、动态配置、服务发现和易于扩展。

为什么使用Nacos?

设想当我们需要在酒店办理入住时,如果前台没有服务人员,就无法得知哪些房间已经打扫完毕可供使用,只能自行寻找合适的房间。通常情况下,酒店会将打扫干净的房间信息登记在前台系统里,这样客人入住时就能通过前台快速了解可用的房间情况。Nacos在这其中就充当前台这一角色。

Nacos 核心功能

服务注册与发现
Nacos 提供服务注册中心,微服务启动时自动注册到 Nacos,其他服务可通过 Nacos 发现并调用目标服务。支持基于 DNS 和 RPC 的服务发现模式。

动态配置管理
通过 Nacos 的配置中心,可实现配置的集中管理和动态更新,无需重启服务。支持多环境(如开发、测试、生产)配置隔离,以及配置变更的监听机制。

服务心跳机制

服务注册成功后,Nacos Client会通过定时心跳机制维持与Nacos Server的连接。该机制能够确保服务持续处于可用状态,避免被系统自动剔除。心跳发送频率默认为每5秒一次。

服务健康监测

Nacos Server 会启动定时任务来监测注册服务实例的健康状态。当某个实例超过15秒未发送心跳时,系统会将该实例的healthy属性设置为false(此时客户端服务发现将无法获取该实例)。若实例持续30秒未发送心跳,则会被直接剔除(被剔除的实例在恢复心跳发送后可重新注册)。

Nacos配置与集成详解

依赖引入

项目通过Spring Cloud Alibaba统一管理Nacos相关依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置文件设置

各服务在bootstrap.yml中配置Nacos配置中心:

spring:
  application:
    name: service-name  # 服务名称
  cloud:
    nacos:
      config:
        server-addr: localhost:8848  # Nacos服务器地址
        file-extension: yml          # 配置文件格式
  profiles:
    active: dev                      # 激活环境

服务发现配置位于application.yml中:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  # Nacos服务器地址

共享配置使用

订单服务通过shared-configs引入全局配置:

spring:
  cloud:
    nacos:
      config:
        shared-configs:
          - data-id: global-config.yml
            refresh: true

服务发现集成

网关服务启用服务发现路由:

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true

动态配置刷新

订单服务中的SentinelController使用@RefreshScope:

@RefreshScope
@RestController
public class SentinelController {
    @Value("${businessConfig.appname}")
    private String appname;
}

Nacos单机部署配置

启动命令:

# Linux/Mac
sh startup.sh -m standalone

# Windows
cmd startup.cmd -m standalone

核心配置:

nacos.standalone=true
nacos.core.auth.enabled=false
server.ip=127.0.0.1

参考文档

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐