溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud中Eureka的使用方法

發(fā)布時間:2021-06-23 09:58:57 來源:億速云 閱讀:260 作者:chen 欄目:編程語言

本篇內(nèi)容主要講解“SpringCloud中Eureka的使用方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“SpringCloud中Eureka的使用方法”吧!

在前期準備的文章中也說過了Spring Cloud的5大組件,今天就來講講服務發(fā)現(xiàn)(注冊)。無論是Spring Cloud H版還是最新的版本,Eureka都是作為服務發(fā)現(xiàn)和注冊的常用組件。

項目搭建

構(gòu)建一個eureka的父模塊,具體怎么實現(xiàn)可以參考前篇文章。

在空項目里面構(gòu)建2個模塊

  • eureka的服務端,eureka的客戶端,其中客戶端在本例僅包括服務的生產(chǎn)者。

Eureka父模塊的pom文件如下,為了方便直接引入了server和client

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-learning</artifactId>
        <groupId>com.cutey.none</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>eureka</artifactId>
    <packaging>pom</packaging>
    <modules>
        <module>eureka-server8001</module>
        <module>eureka-client-provide7001</module>
        <module>eureka-client-consume9001</module>
    </modules>

    <properties>
        <maven.compiler.source>9</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

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

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


    </dependencies>

</project>

可以看到pom文件中指明了父模塊,同時也繼承了父模塊的依賴。全部完成后,我的項目結(jié)構(gòu)如下圖所示:

SpringCloud中Eureka的使用方法

項目的規(guī)約,不一定是和真正開發(fā)一樣,但是為了方便記憶:

  • 服務注冊中心的端口為8xxx

  • 生產(chǎn)端的端口為7xxx

  • 消費端的端口為9xxx

SpringCloud中Eureka的使用方法

Eureka Server

在上一步的pom文件中就已經(jīng)通過maven導入了Eureka Server的依賴。如果沒有在父模塊中導入,則需加入下面的代碼:

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

接下來要做的就是增加配置文件啟動類以及業(yè)務代碼的編寫。

配置文件

application.yml

server:
  port: 8001
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

注意我這里的端口是8001,但是eureka默認的端口是8761,這個端口可以自行修改,所以問題不大。

還有一個需要注意的點是,defaultZone 是一定需要的,官方文檔里面是說service-url 是以鍵值對的形式存儲,所以必須要有key和value。

SpringCloud中Eureka的使用方法

啟動類

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer8001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer8001.class, args);
    }
}

主要是加了一個@EnableEurekaServer 的注解,由于是服務端的原因,在這種demo中就沒有添加其它多余的業(yè)務類。

Eureka Client生產(chǎn)端

生產(chǎn)端可以說真正調(diào)用的地方,提供了業(yè)務代碼。同樣在父模塊中已經(jīng)引入了Eureka Client依賴,如果沒有在父類中引用,那么需要添加以下代碼:

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

配置文件

server:
  port: 7001
spring:
  application:
    name: eureka-provide

eureka:
  client:
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone: http://localhost:8001/eureka/
  instance:
    instance-id: eureka-provide7001

其實會發(fā)現(xiàn)配置文件大差不差,客戶端的時候因為需要往服務端中注冊,所以register-with-eureka 為true,并且后續(xù)可能去注冊中心獲取其它地址,fetch-registry 也為true。然后這個instance-id 是服務注冊到Eureka的實例id,在后面創(chuàng)建集群的時候也會說到。

啟動類和業(yè)務類

本例把啟動類和業(yè)務類放在了一起,因為僅僅是入門的原因,所以基本上能簡則簡,官網(wǎng)上的demo也是這樣的。

@SpringBootApplication
@RestController
@EnableEurekaClient
public class EurekaProvide7001 {

    @Value("${server.port}")
    int port;

    @GetMapping("/eureka/provide")
    public String getInfo() {
        return "hello, eureka provide:" + port;
    }
    public static void main(String[] args) {
        SpringApplication.run(EurekaProvide7001.class, args);
    }
}

首先在主啟動類上添加了@EnableEurekaClient 的注解表明自己是Eureka Client ;其次添加@RestController 作為web項目的controller ,然后業(yè)務邏輯也比較簡單,就不再贅述。

服務端和客戶端已經(jīng)有了,現(xiàn)在就可以開啟服務來進行測試,先開啟端口為8001的服務端,接著開啟端口為7001的客戶端。

SpringCloud中Eureka的使用方法

先來看看客戶端能否正常地訪問業(yè)務http://localhost:7001/eureka/provide,肯定是可以的,就是正常的簡單的Spring Boot項目

SpringCloud中Eureka的使用方法

再來看看Eureka界面,訪問http://localhost:8001/ ,可以發(fā)現(xiàn)服務已經(jīng)被注冊進Eureka

SpringCloud中Eureka的使用方法

Eureka集群

要聲明一點,集群的作用是什么呢,在現(xiàn)階段能想到的答案是兩方面,一方面是做負載均衡;其次是防止服務掛掉。所以Eureka集群也可以分為兩個方面,一個是服務端的集群,一個是客戶端負責提供服務的集群。本小節(jié)重點講的是后面的集群。

啟動兩個端口來模擬兩臺服務器,值得注意的是,雖然端口不一樣,但是服務的名字都是一樣的。在idea中只需要修改配置文件就能啟動不同端口的實例。

注意,還記得上面配置文件中有一項instance-id嗎,為了演示,已經(jīng)修改了上面的配置文件

SpringCloud中Eureka的使用方法

SpringCloud中Eureka的使用方法

在不指定id情況下eureka會自動為我們生成實例id,這時候只需要簡單修改端口即可。

SpringCloud中Eureka的使用方法

但是,如果上面的instance-id 已經(jīng)指定過了(正如原本的配置文件),如果只修改端口會發(fā)現(xiàn)7002端口并沒有注冊進去

SpringCloud中Eureka的使用方法

idea輸出文件如下

SpringCloud中Eureka的使用方法

這種情況下,只需要在上面配置的基礎上再添加一個參數(shù)即可

SpringCloud中Eureka的使用方法

重新啟動7002端口,此時可以發(fā)現(xiàn)服務已經(jīng)注冊進Eureka中

SpringCloud中Eureka的使用方法

結(jié)語

本篇文章只講了Eureka Client的生產(chǎn)端,還有消費端沒講。并不是忘記了,而是留著下一講Ribbon的時候再講解。

到此,相信大家對“SpringCloud中Eureka的使用方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI