Nacos 2.x 入门系列【3】服务注册

293 阅读3分钟

1.概述

在开始学习本篇文档之前,您需要事先了解微服务以下基础知识一些基础概念:

  • 服务:提供软件功能的工作单元
  • 服务名:服务提供的标识,通过该标识可以唯一确定其指代的服务
  • 服务提供方:提供服务被调用的的一方
  • 服务消费方:调用服务的一方
  • 注册中心:存储服务实例和服务负载均衡策略的基础设施
  • 服务注册:服务将自己的网络地址等信息上报给注册中心

多个服务之间进行远程调用时,起码需要知道对方的IP及端口地址,而这些网络信息是非常容易变动的。服务提供方在启动时,可以将自己的服务信息注册到注册中心,服务消费者消费时,在注册中心根据服务名查询提供方的网络信息,然后再调用服务。

在微服务架构中,服务注册中心是其最核心的模块,是对服务实例的地址、健康、负载均衡策略、元数据等信息进行管理的基础设施。

常用的服务注册中心:

  • Zookeeper
  • Eureka
  • Consul
  • Nacos
  • Kubernetes

接下来我们使用Spring Cloud Alibaba集成Nacos的服务注册功能。

2. Spring Cloud Alibaba

2.1 简介

GitHub地址

Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务。

Spring Cloud 本身并不是一个开箱即用的框架,它是一套微服务规范,共有两代实现:

  • Spring Cloud NetflixSpring Cloud 的第一代实现,主要由 Eureka、Ribbon、Feign、Hystrix 等组件组成。
  • Spring Cloud AlibabaSpring Cloud 的第二代实现,主要由 Nacos、Sentinel、Seata 等组件组成。

题外:腾讯也开源了一套一站式微服务解决方案,也就是Spring Cloud Tencent😏😏😏

2.2 版本选择

Spring Cloud Alibaba基于Spring Boot & Cloud,一定要注意他们之间的版本兼容性,否则可能存在兼容性问题。

image.png

因为是学习案例,直接选择2022.x分支,对应的是 Spring Cloud 2022Spring Boot 3.0.x,最低支持 JDK 17

3. 案例演示

演示项目环境为:

  • Windows 10
  • JDK 17
  • Spring Boot 3.0.11
  • Spring Cloud 2022.0.4
  • Spring Cloud Alibaba 2022.0.0.0

3.1 集成

IDEA中,创建演示工程,nacos-demo为父项目,user-demoorder-demo为两个测试后台服务: image.png

nacos-demo POM文件中主要是引入依赖管理:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.pearl</groupId>
    <artifactId>nacos-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>nacos-demo</name>
    <description>nacos-demo</description>
    <packaging>pom</packaging>

    <properties>
        <java.version>17</java.version>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <!--依赖管理-->
    <dependencyManagement>
        <dependencies>
            <!-- https://github.com/spring-projects/spring-boot-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>3.0.10</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- https://github.com/spring-cloud-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2022.0.4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- https://github.com/alibaba/spring-cloud-alibaba-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2022.0.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <modules>
        <module>order-demo</module>
        <module>user-demo</module>
    </modules>

</project>

两个子模块,引入Spring Boot Web以及Nacos服务发现客户端:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Nacos 服务发现客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

查看spring-cloud-starter-alibaba-nacos-discovery引入的依赖,可以看到Nacos客户端的版本为2.2.1

image.png

启动类添加Spring Cloud原生注解@EnableDiscoveryClient开启服务注册发现功能:

@SpringBootApplication
@EnableDiscoveryClient
public class OrderDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderDemoApplication.class, args);
    }

}

application.yml配置文件中分别配置启动端口、应用名称:

server:
  port: 9001
spring:
  application:
    name: order-demo

server:
  port: 9002
spring:
  application:
    name: user-demo

3.2 测试

先启动Nacos服务端,再启动两个测试服务后台,在启动日志中,可以看到当前服务成功注册到了Nacos服务端中: image.png 查看控制台,服务列表中也显示了注册的服务: image.png 点击详情,可以查看到当前服务的详情信息,比较重要的信息有服务名、IP、端口等: image.png