SpringCloud 学习之Eureka 服务注册与发现-【基础篇】

实践是检验真理的唯一标准,技术是检验程序员的唯一途径。

尔虞我诈的社会,默默地驻守那片想看却看不懂的代码。

        Spring Cloud 是现在比较火热的分布式应用框架,可以将传统的单实例应用横向扩展成多个微服务结合的多服务分布式应用,具体有什么样的好处,这里就不一一列举,随便百度,答案成千上万。由于最近在研究Spring Cloud,看到网上有很多的教程,看过之后发现自己看得一脸蒙*,真心受不了,因此这里从开始搭建一个Spring Cloud 项目开始。

       要学习Spring Cloud ,肯定需要有一定的Spring Boot 的基础,如果不会,请先学习(我的另一篇关于idea创建spring boot的项目请点击这里进行查看)。学习Spring Cloud首先要学习的是Eureka,它是整个SpringCloud 的核心组件之一,被称作是服务中心。Eureka分为服务中心Server和客户端Client,将多个Client注册到Server中,供需要服务的Client调用。举个例子:职业介绍所大家都知道吧?很多人将自己的技能挂在介绍所,当有人需要招工的时候,职业介绍所就会从这些已经在这报道的人中找到符合客户需求的人,然后帮其做事。这里的职业介绍所就好比是Eureka的Server,而这些技能提供者就相当于是这里的Client。下面,我们开始创建一个Spring Cloud 的Eureka项目吧!

一、创建server

       

   

       请注意,上面这里选择的是Eureka server ,选择后创建完项目就会自动在pom.xml文件中增加都eureka的依赖,如果这里不选择,也可以项目创建好以后手动添加,这里一步勾选,省去后面的麻烦。

      项目创建完成,项目结构如上图所示,这里有一点需要提醒大家,创建后的项目配置文件自动是properties,我喜欢将其改成yml文件,因为yml的格式可以更清楚看清结构,并且idea还有提示作用。大家后面看到我的是yml文件,不要觉得奇怪。(直接改后缀名为yml,不会出问题,因为springboot 会默认加载这个两种格式的文件)

二、项目文件结构

下面是项目创建好后的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.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.kevin.cloud.eureka</groupId>
    <artifactId>server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>com.kevin.cloud.eureka.server</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.RC2</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</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>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>

</project>

 

接下来,我们什么都不改动,直接启动。这里不需要其他配置,Idea已经都帮你做好了。

项目启动完成,浏览器中输入localhost:8080,返回如下页面,说明项目启动成功。

三、改造为Eureka Server 服务 

        打开application.yml 配置文件,首先,将端口改成8761,可能是习惯性问题吧!大家都喜欢把server配置成8761端口,不要问为什么,可以随便定义,只要不冲突。

        在打开Application.java,添加注解@EnableEurekaServer,申明这是一个Eureka的server 启动类,然后重启项目。


可以看到,后台日志中报了一些错误,如下图:

打开localhost:8761,Eureka 的注册中心查看页面出来了,并且看到下面有一个客户端已经注册进来,仔细一看,端口号8761,这不是server 自己吗?

原来Eureka Server在默认情况下会把自己当做客户端进行注册,这就导致发生了如上错误。至于为什么Server会向Server自己注册,后面的文章会讲到。于是,做下面的修改

eureka.client.register-with-eureka=false 是否向服务注册中心注册自己,false就是不向服务中心注册自己;

eureka.client.fetch-registry=false  是否检索服务,也是false,即表示不寻找Server注册;

server-url: defaultZone: http://localhost:8761/ 表示服务中心的地址。修改完以上几项,再重启项目,

没有注册的客户端,后台也没有报错,至此,Server创建完成。

四、创建Eureka Client

       客户端项目创建Server创建一样,但是在创建的第三步时需要选择Eureka Discovery Client,表示这是创建的客户端项目

找到Application.java 文件入口,添加@EnableEurekaClient注解,代表这是一个Eureka客户端

配置客户端端口,并配置注册中心地址

启动项目,报错,无法找到server。

修改server项目的配置文件,加上appname: eureka

修改client中的服务器注册地址:http://localhost:8761/eureka/,并重启server,重启client。

Server 启动成功,Client启动后没报错,但是会立马停止。这是因为我们在新建项目的时候,并没有说明client是一个web项目,而是一个普通的java应用程序,因此会在启动后立马停止。于是,在Client项目的pom文件中添加web依赖,再次重启Client项目。

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Client启动成功,打开Eureka Server 管理界面,如下图所示:

可以发现,我们的Client已经向Server注册成功。

以上就是Eureka Server 和 Client 的注册过程,按照自己的步骤,每一步都已写到。其中犯下的错误,也都记录下来,希望能给初学者一点帮助。下面的文章,将会深入讲解,望大家多多指导。

posted @ 2019-11-12 23:23  拾忆奔跑  阅读(13)  评论(0)    收藏  举报