1.前言
由于目前所在公司使用的是Dubbo作为Rpc框架,在此记录一下学习SpringCloud的过程(采用2021.0.0版本)。首先,从Dubbo到SpringCloud,我需要去了解一下二者的区别,从而有助于以后开发时的技术选型。 借由一张网图如下,我们可以看到,Dubbo的功能更像是SpringCloud的一个子集。网图有点老了,2018年后netflix的zuul和hystrix已经停止更新了
对于服务注册中心Eureka和Zk的区别:www.cnblogs.com/jichi/p/127… 文章中有提到。接下来,将基于SpringCloud的官方文档搭建一套简单的Demo来进行学习。
新建一个springBoot父项目,将所需要的spring-cloud-dependencies 依赖引入其中,之后所有的组件都作为module创建在该父项目下,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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<packaging>pom</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Cloud</description>
<properties>
<java.version>1.8</java.version>
</properties>
<modules>
<module>eureka-server</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.Eureka服务端搭建
2.1 新建springBoot子项目eureka-server,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>
<parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<groupId>com.example.demo</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-server</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.2 配置文件application.properties中配置eureka Server的访问地址和配置
server.port=8081
spring.application.name=eurekaServer
eureka.instance.hostname=localhost
eureka.client.fetch-registry=false
eureka.client.registerWithEureka=false
eureka.client.serviceUrl.defaultZone= http://${eureka.instance.hostname}:${server.port}/eureka/
2.3 在启动类上加上 @EnableEurekaServer 注解后,项目即可启动
注意!springCloud版本和springBoot版本一定要对应,否则会有兼容性问题 我使用的是SpringBoot(2.6.2)和Spring Cloud(2021.0.0) 官网的版本对应如下
| Release Train | Boot Version |
|---|---|
| 2021.0.x aka Jubilee | 2.6.x |
| 2020.0.x aka Ilford | 2.4.x, 2.5.x (Starting with 2020.0.3) |
| Hoxton | 2.2.x, 2.3.x (Starting with SR5) |
| Greenwich | 2.1.x |
| Finchley | 2.0.x |
| Edgware | 1.5.x |
| Dalston | 1.5.x |
3.Eureka客户端注册
在之前我们搭建了eurekaServer服务器,现在需要将我们的消费示例注册进去。这个消费示例可以是业务组件,只需要在pom文件中加入依赖包spring-cloud-starter-netflix-eureka-client
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在配置文件application.properties中配置eureka服务器的地址:
eureka.client.serviceUrl.defaultZone=http://localhost:8081/eureka/
项目启动后,eureka服务器就可以发现注册信息了
为了方便后续的学习,我们给两个eureka客户端添加一个Rest请求方法
遇到的问题:
1.启动报错java.lang.ClassNotFoundException:com.netflix.discovery.AbstractDiscoveryClientOptionalArgs 类找不到。 找了半天才发现是本地仓库中,eureka-client和eureka-core存在了1.10.16和1.10.17两个版本导致依赖包找不到(SpringCloud导入时,先用了低版本的2020.0.5引入了1.10.16),将本地库清空重新导入就行。