Nacos使用简介

Nacos

Nacos 的作用和使用场景

Nacos 是一款开源的服务注册中心和配置管理中心工具,主要用于微服务架构中的服务发现、服务配置和动态管理。它支持服务注册与发现(类似 Eureka)、配置管理(类似 Spring Cloud Config)以及动态 DNS 服务

在微服务中,服务注册和配置管理是两个重要的部分,Nacos 提供了一站式解决方案。

Nacos 的核心功能

  1. 服务注册与发现
  • 微服务启动时,将自身注册到 Nacos 服务中心。

  • 其他服务通过 Nacos 获取目标服务的地址(如 IP 和端口),实现服务间调用。

  1. 配置管理
  • 管理服务的配置文件,支持动态更新配置,而不需要重启服务。

举例:Nacos 的服务注册与发现

以下是一个基于 Spring Cloud Alibaba 和 Nacos 的简单服务注册与发现示例。

场景描述

有两个微服务:

  1. user-service:用户服务,提供获取用户信息的接口。

  2. order-service:订单服务,需要调用 user-service。

通过 Nacos,user-service 注册到服务中心,order-service 可以发现并调用 user-service。

1. 准备工作

1.1 启动 Nacos 服务中心
  1. 下载 Nacos:

Nacos Releases

  1. 启动 Nacos:
1
sh startup.sh -m standalone
  1. 访问控制台:

2. user-service:用户服务

2.1 引入依赖

在 user-service 的 pom.xml 中添加以下依赖:

1
2
3
4
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.2 配置文件

使用 application.yml 配置文件:

1
2
3
4
5
6
7
8
9
10
server:
port: 8081

spring:
application:
name: user-service # 服务名称
cloud:
nacos:
discovery:
server-addr: localhost:8848 # Nacos 服务地址
2.3 编写用户服务接口

在 user-service 中定义一个简单的 REST 接口:

1
2
3
4
5
6
7
8
9
@RestController
@RequestMapping("/users")
public class UserController {

@GetMapping("/{id}")
public String getUserById(@PathVariable("id") Long id) {
return "User ID: " + id + ", Name: John Doe";
}
}
2.4 启动类

添加 @EnableDiscoveryClient 注解,让服务自动注册到 Nacos。

1
2
3
4
5
6
7
@SpringBootApplication
@EnableDiscoveryClient // 启用服务注册
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}

启动后,user-service 会自动注册到 Nacos 服务中心。

3. order-service:订单服务

3.1 引入依赖

在 order-service 的 pom.xml 中添加以下依赖:

1
2
3
4
5
6
7
8
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
3.2 配置文件

配置 order-service 的 application.yml:

1
2
3
4
5
6
7
8
9
10
server:
port: 8082

spring:
application:
name: order-service # 服务名称
cloud:
nacos:
discovery:
server-addr: localhost:8848 # Nacos 服务地址
3.3 定义 Feign 客户端

通过 OpenFeign 调用 user-service:

1
2
3
4
5
6
@FeignClient(name = "user-service") // 服务名,与 user-service 注册到 Nacos 的名称一致
public interface UserServiceFeignClient {

@GetMapping("/users/{id}")
String getUserById(@PathVariable("id") Long id);
}
3.4 编写订单服务接口

在 order-service 中调用 user-service:

1
2
3
4
5
6
7
8
9
10
11
12
13
@RestController
@RequestMapping("/orders")
public class OrderController {

@Autowired
private UserServiceFeignClient userServiceFeignClient;

@GetMapping("/{orderId}")
public String getOrderDetails(@PathVariable("orderId") Long orderId) {
String userInfo = userServiceFeignClient.getUserById(1L); // 调用 user-service
return "Order ID: " + orderId + ", User Info: " + userInfo;
}
}
3.5 启动类

同样添加 @EnableDiscoveryClient 注解:

1
2
3
4
5
6
7
8
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients // 开启 Feign 客户端
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
}

4. 运行示例

  1. 启动 Nacos 服务中心
  • 启动 Nacos 服务,确保控制台正常访问。
  1. 启动 user-service 和 order-service
  • 启动 user-service,它会自动注册到 Nacos。

  • 启动 order-service,同样注册到 Nacos。

  1. 验证服务调用
1
Order ID: 123, User Info: User ID: 1, Name: John Doe
  1. 查看 Nacos 控制台
  • 打开 http://localhost:8848/nacos

  • 服务列表中可以看到 user-service 和 order-service 已经注册。