1.概述
在开始学习本篇文档之前,您需要事先了解微服务以下基础知识一些基础概念:
- 服务:提供软件功能的工作单元
- 服务名:服务提供的标识,通过该标识可以唯一确定其指代的服务
- 服务提供方:提供服务被调用的的一方
- 服务消费方:调用服务的一方
- 注册中心:存储服务实例和服务负载均衡策略的基础设施
- 服务注册:服务将自己的网络地址等信息上报给注册中心
多个服务之间进行远程调用时,起码需要知道对方的IP及端口地址,而这些网络信息是非常容易变动的。服务提供方在启动时,可以将自己的服务信息注册到注册中心,服务消费者消费时,在注册中心根据服务名查询提供方的网络信息,然后再调用服务。
在微服务架构中,服务注册中心是其最核心的模块,是对服务实例的地址、健康、负载均衡策略、元数据等信息进行管理的基础设施。
常用的服务注册中心:
ZookeeperEurekaConsulNacosKubernetes
接下来我们使用Spring Cloud Alibaba集成Nacos的服务注册功能。
2. Spring Cloud Alibaba
2.1 简介
Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务。
Spring Cloud 本身并不是一个开箱即用的框架,它是一套微服务规范,共有两代实现:
Spring Cloud Netflix是Spring Cloud的第一代实现,主要由Eureka、Ribbon、Feign、Hystrix等组件组成。Spring Cloud Alibaba是Spring Cloud的第二代实现,主要由Nacos、Sentinel、Seata等组件组成。
题外:腾讯也开源了一套一站式微服务解决方案,也就是Spring Cloud Tencent😏😏😏
2.2 版本选择
Spring Cloud Alibaba基于Spring Boot & Cloud,一定要注意他们之间的版本兼容性,否则可能存在兼容性问题。
因为是学习案例,直接选择2022.x分支,对应的是 Spring Cloud 2022 与 Spring Boot 3.0.x,最低支持 JDK 17。
3. 案例演示
演示项目环境为:
Windows 10JDK 17Spring Boot 3.0.11Spring Cloud 2022.0.4Spring Cloud Alibaba 2022.0.0.0
3.1 集成
在IDEA中,创建演示工程,nacos-demo为父项目,user-demo、order-demo为两个测试后台服务:
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:
启动类添加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服务端中:
查看控制台,服务列表中也显示了注册的服务:
点击详情,可以查看到当前服务的详情信息,比较重要的信息有服务名、
IP、端口等: