Nacos 使用说明

1. 什么是 Nacos?

Nacos (Dynamic Na ming and Co nfiguration S ervice)是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现配置管理服务管理平台。

它的核心功能可以概括为两点:

  • 服务注册与发现:微服务实例可以将自己注册到Nacos,并能发现和调用其他健康的服务实例。
  • 动态配置管理:集中管理所有环境的应用程序配置,并支持配置的动态刷新,无需重启应用。

2. 核心概念

2.1 服务发现相关

  • 命名空间 :用于进行租户粒度的配置隔离。不同的命名空间(如dev, test, prod)下的服务和配置相互不可见。
  • 服务:对外提供的软件功能。
  • 服务实例:提供某个服务的具体进程,通常对应一个可访问的IP和端口。
  • 元数据:描述服务实例的附加信息,如版本、环境等,用于更精细的服务治理。
  • 集群:同一个服务可以部署在多个集群(如北京机房、上海机房),以实现容灾或同城多活。
  • 健康检查:Nacos通过心跳或主动探测来判断服务实例是否健康,只会将健康的实例返回给消费者。

2.2 配置管理相关

  • 配置集 :一个系统或应用的配置文件集合,通常对应一个YAMLProperties文件。
  • 配置集 ID :配置集的唯一标识,通常使用${spring.application.name}.${file-extension}的格式。
  • 配置分组 :对配置集进行分组,默认是DEFAULT_GROUP。可用于区分不同应用或不同用途的配置。
  • Data ID:配置集的名称。

3. 安装与启动

3.1 环境准备

  • JDK 1.8+

3.2 下载与安装

Nacos GitHub Release 页面下载最新稳定版的压缩包。

bash

复制下载

bash 复制代码
# 以 nacos-server-2.2.3.tar.gz 为例
tar -zxvf nacos-server-2.2.3.tar.gz
cd nacos

3.3 启动服务器

单机模式(适合开发测试)

bash

复制下载

bash 复制代码
# Linux/Unix/Mac
sh bin/startup.sh -m standalone

# Windows
cmd bin/startup.cmd -m standalone

-m standalone 代表以单机模式启动,默认使用内嵌数据库(Derby),数据无法持久化。

集群模式(适合生产环境)

  1. 配置数据库 :修改 conf/application.properties,使用MySQL作为持久化存储。

    properties

    复制下载

    ini 复制代码
    spring.datasource.platform=mysql
    db.num=1
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user.0=nacos
    db.password.0=nacos
  2. 配置集群 :修改 conf/cluster.conf,列出集群中所有节点的IP和端口。

    text

    复制下载

    makefile 复制代码
    192.168.1.10:8848
    192.168.1.11:8848
    192.168.1.12:8848
  3. 启动集群 :在每个节点上执行启动命令(无需 -m standalone 参数)。

    bash

    复制下载

    bash 复制代码
    sh bin/startup.sh

3.4 访问控制台

启动成功后,访问 http://localhost:8848/nacos

  • 默认用户名/密码nacos / nacos

4. 服务发现功能使用

4.1 服务提供者注册

1. 引入Spring Cloud Alibaba依赖

xml

复制下载运行

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2022.0.0.0</version>
</dependency>

2. 配置应用

application.yml 中配置Nacos服务器地址和应用名。

yaml

复制下载

yaml 复制代码
spring:
  application:
    name: user-service # 服务名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # Nacos服务器地址
        namespace: dev-01 # 可选,指定命名空间ID
        group: MY_GROUP # 可选,指定分组,默认为DEFAULT_GROUP

3. 启用服务发现

在启动类上添加 @EnableDiscoveryClient 注解。

java

复制下载

less 复制代码
@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}

启动应用后,即可在Nacos控制台的 "服务管理 -> 服务列表" 中看到注册的服务。

4.2 服务消费者发现与调用

服务消费者同样需要引入依赖和配置。然后可以通过两种方式调用:

1. 使用 @LoadBalanced RestTemplate

java

复制下载

less 复制代码
@Configuration
public class AppConfig {
    @Bean
    @LoadBalanced // 开启负载均衡
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

@RestController
public class OrderController {
    
    @Autowired
    private RestTemplate restTemplate;
    
    @GetMapping("/order/{userId}")
    public String getUserInfo(@PathVariable String userId) {
        // 直接使用服务名进行调用,而非IP地址
        String url = "http://user-service/user/" + userId;
        return restTemplate.getForObject(url, String.class);
    }
}

2. 使用 OpenFeign

  • 引入 spring-cloud-starter-openfeign 依赖。
  • 在启动类上添加 @EnableFeignClients
  • 编写Feign客户端接口。

java

复制下载

less 复制代码
@FeignClient(name = "user-service") // 指定服务名
public interface UserClient {
    
    @GetMapping("/user/{id}")
    String getUserById(@PathVariable("id") Long id);
}

5. 配置管理功能使用

5.1 引入配置中心依赖

xml

复制下载运行

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2022.0.0.0</version>
</dependency>

5.2 创建 bootstrap.ymlbootstrap.properties

Spring Cloud应用会优先加载 bootstrap 配置文件。

yaml

复制下载

yaml 复制代码
spring:
  application:
    name: user-service # 应用名,用于构成Data ID
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        namespace: dev-01 # 命名空间ID
        group: DEFAULT_GROUP # 配置分组
        file-extension: yaml # 配置格式,默认为properties
        # 指定要加载的配置集,多个用逗号分隔
        # 格式:${prefix}-${spring.profiles.active}.${file-extension}
        # 如果没有激活的profile,则格式为:${prefix}.${file-extension}
        # 默认会加载 Data ID 为 'user-service.yaml' 的配置

5.3 在Nacos控制台创建配置

  1. 进入 "配置管理 -> 配置列表"

  2. 点击 "+" 新建配置。

    • Data ID : user-service.yaml (必须与 bootstrap.yml 中约定的格式一致)
    • Group : DEFAULT_GROUP
    • 配置格式 : YAML
    • 配置内容:

    yaml

    复制下载

    yaml 复制代码
    server:
      port: 8080
    app:
      name: user-service
      version: v1.0
    custom:
      config: "Hello, Nacos Config!"

5.4 在应用中读取配置

使用 @Value 注解,并在类上添加 @RefreshScope 以实现配置动态刷新。

java

复制下载

less 复制代码
@RestController
@RefreshScope
public class ConfigController {
    
    @Value("${custom.config:defaultValue}")
    private String configValue;
    
    @GetMapping("/config")
    public String getConfig() {
        return configValue;
    }
}

当你在Nacos控制台修改 custom.config 的值并发布后,应用会立即获取到新值,无需重启。


6. Nacos控制台主要功能

  • 服务管理:查看、查询、删除服务,以及服务的健康状态和实例列表。
  • 配置管理:创建、编辑、发布、删除、历史版本回滚、监听查询(查看哪些IP在监听该配置)。
  • 命名空间:管理不同的环境或租户的隔离。
  • 集群管理:查看Nacos服务器自身的集群状态。

7. 总结

Nacos作为一个集服务发现与配置管理于一体的平台,极大地简化了微服务架构的治理复杂度。其核心使用流程可以概括为:

  1. 部署:下载、安装并启动Nacos Server。

  2. 服务治理

    • 服务提供者通过 @EnableDiscoveryClient 注册。
    • 服务消费者通过服务名(配合负载均衡)进行调用。
  3. 配置管理

    • bootstrap.yml 中配置Nacos Config。
    • 在控制台创建和管理配置。
    • 在应用中使用 @Value@RefreshScope 实现动态配置。

通过结合控制台的图形化界面,Nacos提供了非常友好和强大的微服务治理能力。

相关推荐
用户68545375977693 小时前
零拷贝技术完全指南:让数据坐上"直达高铁"!🚄
后端
该用户已不存在3 小时前
我的Python工具箱,不用加班的秘密
前端·后端·python
文心快码BaiduComate3 小时前
新手如何高效使用 Zulu 智能体?从入门到提效全指南
前端·后端
G探险者3 小时前
云原生时代下的 JVM 内存管理:为什么你的服务不会“自动扩容”?
后端·云原生
渣哥3 小时前
还在写繁琐监听器?Spring @EventListener 注解让你代码瞬间简化
javascript·后端·面试
搞笑我们是认真的_______狗才写代码3 小时前
技术总监:学着点,我们团队就缺这样的人才
后端
马尚来3 小时前
掌握Kotlin编程,从入门到精通:视频教程
后端·kotlin
yeyong3 小时前
将所有的服务都放在里面做一个容器用supervisor管理进程 VS 用很多容器跑单独应用并集成一套,哪种更好?
后端
yeyong3 小时前
在windows上如何编译出arm64架构可跑的go程序
后端