每天學點SpringCloud(五):如何使用高可用的Eureka

前幾篇文章我們講了一下Eureka的基礎使用,但是呢有一個很重要的問題,我們講的都是單機版的情況,如果這個時候Eureka服務掛了的話,那麼我們的服務提供者跟服務消費者豈不是都廢了?服務提供者和消費者都廢了的話那這個程序還有存在的意義麼?

那麼今天咱們就講一講如何解決這個問題。相信大家都知道,這個問題是我們提供高可用服務必須經歷的問題。解決方案就是加集羣,那麼我們來看一下Eureka怎麼實現集羣吧。

1.首先呢,我們把原先的cloud-demo-eureka項目負責一份命名爲cloud-demo-eureka-hign(高可用的服務,哈哈)

注意沒有看過前幾篇文章的童鞋可以在文章底部找到GitHub地址先看一下代碼。

爲了省事起見,我們先把security的依賴去掉。


<?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-demo</artifactId>
    <groupId>cn.org.zhixiang</groupId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>cloud-demo-eureka-high</artifactId>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <!--注意此處的依賴是SpringBoot2.0以後專用的,如果您使用的SpringBoot版本低於2.0請使用spring-cloud-starter-eureka-server-->
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>

  </dependencies>
</project>

2.啓動類只需要改一下名字其他的不變

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

3.我們現在要玩點不一樣的了,此次項目我們使用了4個配置文件。它們分別是application.yml、application-dev1.yml、application-dev2.yml、application-dev3.yml。這裏解釋一下爲什麼會使用4個配置文件,如果我們在生產環境上這裏其實應該是有三個程序的,但是我們爲了測試方便,就使用這一個程序當成三個使用。

先看我們的application.yml文件變成什麼樣子了。


spring:
  profiles:
    active: dev1
  application:
    name: eureka-server-high
dev:
  host: localhost
  dev1Port: 8761
  dev2Port: 8762
  dev3Port: 8763

我們可以看到位於最上方的就是一個spring.profiles.active屬性,這個屬性呢,通常適用於我們不同環境下配置的切換。舉個例子,我們可能有開發、測試、生產等等不同的環境,這幾個環境使用的肯定不是一個數據庫,如果我們每次在各個環境都要修改一下配置文件那樣豈不是累死了。而spring.profiles.active屬性呢,就是指定的我們的項目啓動加載的配置文件,例如我們配的值爲dev1,那麼一會當我們啓動項目的時候就會去加載application-dev1.yml文件.

緊接着就是spring.application.name了,相信大家都知道了,我們此次的應用名稱就是eureka-server-high了。

下面呢其實是我自定義的一個配置,因爲此次我們要使用三個Eureka服務來組成一個集羣,所以我先在這裏指定一下這三個服務的端口號,至於爲什麼在這指定相信看了下面三個配置文件你就明白了。

4.先來看一下application-dev1.yml

server:
  port: ${dev.dev1Port}
eureka:
  client:
    service-url:
      defaultZone: http://${dev.host}:${dev.dev2Port}/eureka,http://${dev.host}:${dev.dev3Port}/eureka

可以看到首先定義了端口號是上方我們在application.yml文件中定義的一個端口號8761,然後它註冊的地址變成兩個了,就是端口端口號爲8762和8763的程序。

接着看application-dev2.yml


server:
  port: ${dev.dev2Port}
eureka:
  client:
    service-url:
      defaultZone: http://${dev.host}:${dev.dev1Port}/eureka,http://${dev.host}:${dev.dev3Port}/eureka

它註冊了8761和8763的程序

那麼現在我想你應該已經猜出來了application-dev3.yml是怎麼寫的了吧

server:
  port: ${dev.dev3Port}
eureka:
  client:
    service-url:
      defaultZone: http://${dev.host}:${dev.dev1Port}/eureka,http://${dev.host}:${dev.dev2Port}/eureka

5.配置文件搞定以後我們可以啓動了。

首先我們到CloudDemoEureHighApplication類中右鍵run啓動程序,這裏你會發現兩個疑點:

項目啓動報錯哎。哈哈,其實不用怕,報錯其實是正常的,不報錯才奇怪呢。你想到報錯的原因了麼?我們啓動使用的配置文件是dev1,他啓動會向端口號爲8762和端口號爲8763的項目註冊,這兩個項目都沒有,所以肯定會報錯。不過沒關係,Eureka其實是啓動成功了的,現在你打開瀏覽器訪問以下localhost:8671其實是可以看到Eureka已經註冊成功了。

還有一個疑點就是:哎,小編你上邊不是說我們用一個程序模擬三個麼,可是我這個啓動了以後,再啓動不是重啓了麼。我咋啓動三個呀。

其實這個呢因爲小編有妙招,現在我們8761已經啓動了對吧,接下來跟我一步一步走
每天學點SpringCloud(五):如何使用高可用的Eureka

先點擊這個 Edit Configuration,然後看下圖
每天學點SpringCloud(五):如何使用高可用的Eureka

按照圖片的標號,先點擊加號圖標,然後起個與CloudDemoEurekaHighApplication不一樣的名字,這裏我是加了一個-3,然後在第三個位置就是我們啓動類的路徑,最後一個位置就是選中要啓動的模塊。現在一個新的啓動方式就做好了,接着我們把application.yml文件中的spring.

profiles.active改成dev3。

每天學點SpringCloud(五):如何使用高可用的Eureka

接着按上圖順序選中剛剛定義的啓動方式,點擊debugger啓動。現在是不是發現dev3的程序也啓動了。雖然還是保錯,我想你應該知道原因了。

接着如法炮製,我們啓動dev2,記住不要忘了修改application.yml。

現在三個服務都起來了,我們的集羣是不是成功了呢

瀏覽器訪問localhost:8761或者8762或者8763你是不是都看到了下圖這樣三個節點呢

每天學點SpringCloud(五):如何使用高可用的Eureka

如果你看到的是這樣的一個效果,那麼就恭喜你Eureka集羣已經搭建成功了。

6.使用:

既然集羣搭建成功了,那麼就可以使用了,還記得我們如何把客戶端註冊的服務器上麼,不記得話請抓緊時間複習一下:每天學點SpringCloud(二):服務註冊與發現Eureka

當時我們註冊的時候,因爲沒有集羣所以應該是這樣寫的

eureka:
client:
register-with-eureka: true
service-url:
defaultZone: http://localhost:8761/eureka

你要是問我現在還這樣寫能行麼,我告訴你可以,這樣沒問題,但是我不推薦。爲什麼呢,雖然我們現在使用的是集羣,當我們的服務提供者註冊上以後應該是三個節點都會有這個服務提供者,就算8761這個節點掛了也無所謂。但是,如果我們服務提供者在註冊的時候8761就已經掛了,那麼它是註冊不上的,人家8762和8763現在是不認識它的。所以我推薦給你的寫法就是:

defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka,http://localhost:8763/eureka

GitHub:https://github.com/shiyujun/spring-cloud-demo

如果對您有所幫助,請記得幫忙點一個star哦

本文出自https://zhixiang.org.cn/#/blog/read/7c4e3ff7-786c-47fb-bdc3-d0856c8415ff,轉載請保留。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章