SpringCloud入門(一)Eureka 服務註冊與發現

SpringCloud入門(一)Eureka 服務註冊與發現

springcloud的中文文檔網站:https://www.springcloud.cc/spring-cloud-dalston.html

簡述

服務發現是基於微服務架構的關鍵原則之一。嘗試配置每個客戶端或某種形式的約定可能非常困難,可以非常脆弱。Spring Cloud 封裝了 Netflix 公司開發的 Eureka 模塊來實現 服務註冊和發現。Eureka 採用了 C/S 的 設計架構。Eureka Server 作爲 服務註冊中心,系統中的 其他微服務,使用 Eureka 的 客戶端 連接到 Eureka Server,並通過 心跳連接 檢測服務的 存活狀態。

在這裏插入圖片描述

Eureka Server 服務註冊與發現中心端 提供服務註冊和發現的能力(通常就是微服務中的註冊中心)

Eureka Client

  • Service Provider服務提供者端 一個Java客戶端,用於簡化與 Eureka Server 的交互(通常就是微服務中的客戶端和服務端)
    Service Consumer服務調用者端 一個Java客戶端,用於簡化與 Eureka Server 的交互(通常就是微服務中的客戶端和服務端)

各個微服務啓動時,會通過 Eureka Client 向 Eureka Server 註冊自己,Eureka Server 會存儲該服務的信息也就是說,每個微服務的客戶端和服務端,都會註冊到 Eureka Server,這就衍生出了微服務相互識別的話題

同步:每個 Eureka Server 同時也是 Eureka Client(邏輯上的),多個 Eureka Server之間通過複製的方式完成服務註冊表的同步,形成 Eureka 的高可用。

識別:Eureka Client 會緩存 Eureka Server中的信息,即使所有 Eureka Server 節點都宕掉,服務消費者仍可使用緩存中的信息找到服務提供者。

續約:微服務會週期性(默認30s)地向 Eureka Server 發送心跳以Renew(續約)信息(類似於heartbeat)

續期:Eureka Server 會定期(默認60s)執行一次失效服務檢測功能,它會檢查超過一定時間(默認90s)沒有Renew的微服務,發現則會註銷該微服務節點。

一. 簡單實例 eureka server 和client

1. 搭建單點的服務註冊中心

新建一個項目,本次使用的springcloud和boot版本爲:

  <dependencyManagement>
        <dependencies>
             <dependency>
                 <groupId>org.springframework.cloud</groupId>
                 <artifactId>spring-cloud-dependencies</artifactId>
                 <version>Greenwich.RELEASE</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

加入eureka server的依賴

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

修改boot配置文件j加入相關配置

server:
  port: 8761
eureka:
  instance:
    hostname: localhost #實例名
    instance-id: ${spring.cloud.client.ip-address}:${server.port} # 實例詳情顯示
    prefer-ip-address: true
  client:
    fetch-registry: false #設置是否從 Eureka Server 獲取 註冊信息,默認爲 true。因爲本例是一個 單點 的 Eureka Server,不需要 同步 其他 Eureka Server 節點的數據,所以設置爲 false
    register-with-eureka: false #設置是否將自己作爲 Eureka Client 註冊到 Eureka Server,默認爲 true。
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #設置的是與 Eureka Server 的 交互地址,查詢 和 註冊服務 都依賴這個地址,如果有多個可以使用 英文逗號分隔。
  server:
    enable-self-preservation: true #Eureka的自我保護機制關閉,紅字提醒(生產環境不推薦關閉)
    eviction-interval-timer-in-ms: 60000 # 默認爲60 * 1000ms (一分鐘)

在啓動類加入@EnableEurekaServer註解

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer8761Application {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServer8761Application.class, args);
    }

}

啓動服務,打開瀏覽器訪問 localhost:8761,可以看到eureka的服務面板。

在這裏插入圖片描述

2. 搭建客戶端client

再新建一個項目

pom文件加入依賴

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

在yml文件中加入配置

server:
  port: 9090
spring:
  application:
    name: client-9090 #應用名稱
eureka:
  instance:
    instance-id: ${spring.cloud.client.ip-address}:${server.port} # 實例id詳情顯示
    prefer-ip-address: true #顯示ip
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka #服務端的地址

在啓動類上加入@EnableEurekaClient註解

@SpringBootApplication
@EnableEurekaClient
public class EurekaClient9090Application {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClient9090Application.class, args);
    }

}

啓動之後,再啓動服務端,打開eureka的服務面板

localhost:8761可以看到,實例已經出現在面板中

在這裏插入圖片描述

二. 搭建eureka集羣

通過運行多個實例並請求他們相互註冊,可以使Eureka更具彈性和可用性。Eureka 通過節點 對等註冊 的方式實現 高可用的部署,所以只需要爲每一個 Eureke Server 配置 其他可用的 Eureke Server 的 serviceUrl,就能實現高可用部署。

首先我們按照單機如法炮製1個相同的服務端項目。建立8762端口的項目。

8761的項目yml配置爲:

server:
  port: 8761
eureka:
  instance:
    hostname: localhost8761 #實例名
  client:
    service-url:
      defaultZone: http://localhost:8762/eureka/ #設置的是與 Eureka Server 的 交互地址,查詢 和 註冊服務 都依賴這個地址,如果有多個可以使用 英文逗號分隔。
spring:
  application:
    name: eureka-server-8761

8762的項目:

server:
  port: 8762
eureka:
  instance:
    hostname: localhost8762
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/ #設置的是與其他Eureka Server 的 交互地址

spring:
  application:
    name: eureka-server-8762

啓動,咱們之前的9090和8761、8762三個項目。

訪問服務面板

在這裏插入圖片描述

集羣搭建成功,在8761和8762中都可以看到互相的服務,在客戶端9090項目中serverurl可以只寫一個,集羣會進行同步,在8762中也能看到。

想在單機中實驗的更真的話,可以修改hosts文件,再試一遍。

127.0.0.1 localhost8761 localhost8762 

本文代碼地址:

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