Spring Cloud 实战系列:服务注册与发现 Alibaba Nacos

🌈 服务注册与发现 Alibaba Nacos

版本定义

<spring.boot.version>2.6.13</spring.boot.version>
<spring.cloud.version>2021.0.5</spring.cloud.version>
<spring.cloud-alibaba.version>2021.0.5.0</spring.cloud-alibaba.version>

官方资料

https://nacos.io

🌈 服务注册与发现

🐯 什么是 Alibaba Nacos

Nacos 是一个 Alibaba 开源的、易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

使用 Spring Cloud Alibaba Nacos Discovery,可基于 Spring Cloud 的编程模型快速接入 Nacos 服务注册功能。

🐯 为什么需要 Alibaba Nacos

服务发现是微服务架构体系中最关键的组件之一。如果尝试着用手动的方式来给每一个客户端来配置所有服务提供者的服务列表是一件非常困难的事,而且也不利于 服务的动态扩缩容。Nacos Discovery 可以帮助您将服务自动注册到 Nacos 服务端并且能够动态感知和刷新某个服务实例的服务列表。

🌈 Nacos 服务注册

在提供者微服务引入 Nacos,将服务信息注册到 Nacos Server。

🐯 引入 Alibaba Nacos

添加依赖

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

🐯 配置 Alibaba Nacos

添加 Nacos 基本的配置

spring:
  application:
    name: spring-cloud-alibaba-nacos-demo
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # Nacos 服务端地址
management:
  endpoints:
    web:
      exposure:
        include: '*'

启动类添加注解,开启服务注册/发现功能

@EnableDiscoveryClient

启动服务后就可以在 Nacos 服务的控制台上看到已注册的服务信息:

在这里插入图片描述

🐯 Nacos Server

参考 Nacos 官网 https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html

Nacos Server 启动后,进入 http://ip:8848 查看控制台(默认账号名/密码为 nacos/nacos)

本文在 Windows 单机模式运行:

startup.cmd -m standalone

🌈 Nacos 服务发现

在消费者微服务引入 Nacos,从 Nacos Server 中获取提供者微服务信息。

🦉 消费者微服务同样需要和提供者微服务一样,引入 Alibaba Nacos 并配置,操作同上文一致。

消费者可以配合使用 RestTemplate 或 OpenFeign 进行服务的调用。

🐯 使用 RestTemplate

1、添加依赖

<!-- Spring Cloud LoadBalancer 客户端负载均衡器 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

2、配置 RestTemplate

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

3、编写调用代码,调用提供者微服务的接口

private String serverURL = "http://spring-cloud-alibaba-nacos-demo"; // 提供者微服务名

@GetMapping(value = "/rest/{id}")
public String rest(@PathVariable("id") Long id) {

    return restTemplate.getForObject(serverURL + "/provider/rest/" + id, String.class);
}

启动测试,成功请求到结果

🐯 使用 OpenFeign

1、添加依赖

<!-- 声明性 REST 客户端 feign -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、首先开启,启动类添加注解

@EnableFeignClients

3、编写 Feign 调用服务方的接口

@FeignClient(value = "spring-cloud-alibaba-nacos-demo") // 提供者微服务名
public interface DemoRESTClient {
    @GetMapping(value = "/provider/rest/{id}")
    String rest(@PathVariable("id") Long id);  // 提供者接口
}

4、调用服务方接口

@GetMapping(value = "/rest/feign/{id}")
public String restFeign(@PathVariable("id") Long id) {
    return demoRESTClient.rest(id);
}

启动测试~~

🌮 至此,完成 Alibaba Nacos 作为 Spring Cloud 的服务注册与发现

🍔 更多 Alibaba Nacos 内容参考 https://nacos.io/zh-cn/docs/v2/what-is-nacos.html