SpringCloud【2021.0.0版本】学习(1)服务发现组件Eureka 服务端搭建

530 阅读2分钟

1.前言

由于目前所在公司使用的是Dubbo作为Rpc框架,在此记录一下学习SpringCloud的过程(采用2021.0.0版本)。首先,从Dubbo到SpringCloud,我需要去了解一下二者的区别,从而有助于以后开发时的技术选型。 借由一张网图如下,我们可以看到,Dubbo的功能更像是SpringCloud的一个子集。网图有点老了,2018年后netflix的zuul和hystrix已经停止更新了

20191209163438752.png

对于服务注册中心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 注解后,项目即可启动

image.png

注意!springCloud版本和springBoot版本一定要对应,否则会有兼容性问题 我使用的是SpringBoot(2.6.2)和Spring Cloud(2021.0.0) 官网的版本对应如下

Release TrainBoot Version
2021.0.x aka Jubilee2.6.x
2020.0.x aka Ilford2.4.x, 2.5.x (Starting with 2020.0.3)
Hoxton2.2.x, 2.3.x (Starting with SR5)
Greenwich2.1.x
Finchley2.0.x
Edgware1.5.x
Dalston1.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服务器就可以发现注册信息了

image.png

为了方便后续的学习,我们给两个eureka客户端添加一个Rest请求方法

image.png

遇到的问题

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),将本地库清空重新导入就行。