springcloud 微服務 之 Eureka 配置

kbfrmcob發表於2020-08-12

  Eureka註冊中心/服務發現框架

  Eureka是Netflix開發的服務發現框架,本身是一個基於REST的服務,主要用於定位執行在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉移的目的。SpringCloud將它整合在其子專案spring-cloud-netflix中,以實現SpringCloud的服務發現功能。

  Eureka包含兩個元件:Eureka Server和Eureka Client。

  Eureka Server提供服務註冊服務,各個節點啟動後,會在Eureka Server中進行註冊,這樣EurekaServer中的服務登錄檔中將會儲存所有可用服務節點的資訊,服務節點的資訊可以在介面中直觀的看到。

  Eureka Client是一個java客戶端,用於簡化與Eureka Server的互動,客戶端同時也就是一個內建的、使用輪詢(round-robin)負載演算法的負載均衡器。

  在應用啟動後,將會向Eureka Server傳送心跳,預設週期為30秒,如果Eureka Server在多個心跳週期內沒有接收到某個節點的心跳,Eureka Server將會從服務登錄檔中把這個服務節點移除(預設90秒)。

  Eureka Server之間通過複製的方式完成資料的同步,Eureka還提供了客戶端快取機制,即使所有的Eureka Server都掛掉,客戶端依然可以利用快取中的資訊消費其他服務的API。綜上,Eureka通過心跳檢查、客戶端快取等機制,確保了系統的高可用性、靈活性和可伸縮性。

  如何使用構建 Eureka Server ?

  加入依賴(此處以Maven為例)

  <!-- 1. 繼承 spring-boot-starter-parent ,如果是聚合工程可以寫到父工程中-->

  <parent>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-parent</artifactId>

  <version>2.0.4.RELEASE</version>

  <relativePath/> <!-- lookup parent from repository -->

  </parent>

  <!-- 2.加入Eureka 服務端依賴 -->

  <dependencies>

  <dependency>

  <groupId>org.springframework.cloud</groupId>

  <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>

  </dependency>

  </dependencies>

  建立Eureka Server 主執行類

  package com.liang.cloud;

  import org.springframework.boot.SpringApplication;

  import org.springframework.boot.autoconfigure.SpringBootApplication;

  import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

  @EnableEurekaServer // 加上啟用Eureka服務註解(標記其為Eureka服務)

  @SpringBootApplication

  public class EurekaServerApplication {

  public static void main(String[] args) {

  SpringApplication.run(EurekaServerApplication.class,args);

  }

  }

  Eureka Server 會帶有一個Web主頁,預設訪問地址:http://localhost:8761/。

  Eureka服務 沒有後臺儲存,但是登錄檔中的所有服務例項都必須傳送心跳訊號以使其註冊保持最新(因此可以在記憶體中完成)。客戶端還具有Eureka註冊的記憶體快取(因此,對於每個對服務的請求,它們都不必進入登錄檔)。

  預設情況下,每個Eureka服務端也是有Eureka客戶端,並且需要(至少一個)服務URL來定位。如果您不提供該服務,則該服務將不斷執行,所輸出的錯誤日誌,也許對你有所干擾(如果你埠不是8761並且配置了另外的serviceUrl則會不斷產生這樣的錯誤日誌,如果按預設配置只會報一次這樣的錯誤,隨後待自身啟動後便可連線自身成功)。

  單機配置

  application.yml(單個Eureka服務配置),如下:

  server:

  port: 8761 # 埠

  spring:

  application:

  name: eureka-server # 應用名稱,會在Eureka中顯示

  eureka:

  client:

  register-with-eureka: false # 是否註冊自己的資訊到EurekaServer,預設是true

  fetch-registry: false # 是否拉取其它服務的資訊,預設是true

  service-url: # EurekaServer的地址,現在是自己的地址,如果是叢集,需要加上其它Server的地址。

  defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka

  請注意serviceUrl,指向與本地例項相同的主機。

  叢集配置

  application.yml(兩個Eureka服務配置),如下

  ---

  server:

  port: 6001

  spring:

  profiles: eureka6001

  eureka:

  instance:

  hostname: eureka6001.com

  client:

  register-with-eureka: false # 是否註冊自己的資訊到EurekaServer,預設是true

  fetch-registry: false # 是否拉取其它服務的資訊,預設是true

  service-url: # EurekaServer的地址,現在是自己的地址,如果是叢集,需要加上其它Server的地址。

  defaultZone: http://eureka6002:6002/eureka

  ---

  server:

  port: 6002

  spring:

  profiles: eureka6002

  eureka:

  instance:

  hostname: eureka6002.com

  client:

  register-with-eureka: false # 是否註冊自己的資訊到EurekaServer,預設是true

  fetch-registry: false # 是否拉取其它服務的資訊,預設是true

  service-url: # EurekaServer的地址,現在是自己的地址,如果是叢集,需要加上其它Server的地址。

  defaultZone: http://eureka6001:6001/eureka

  在前面的示例中,我們有一個YAML檔案,通過在不同的Spring配置檔案中執行該伺服器,可以在兩個主機(eureka6001和eureka6002)上執行同一Eureka服務。您可以使用此配置通過操作/etc/hosts解析主機名來測試單個主機上的對等感知(在生產環境中這樣做沒有太大價值)。實際上,eureka.instance.hostname如果您在知道其主機名的計算機上執行(預設情況下,使用的是該機器的主機名)。Eureka springcloud 應用例項 www.1b23.com

  您可以將多個Eureka服務新增到叢集,並且只要它們均通訊的連線,它們就可以在彼此之間同步註冊。如果在物理上分開(在一個資料中心內或在多個資料中心之間),只要它們都直接相互連線,它們就可以在彼此之間同步註冊。

  Eureka Client 連線Eureka Server 叢集配置

  application.yml(兩個Eureka服務連線地址都需要加進來,英文逗號分隔),如下

  eureka:

  client:

  serviceUrl:

  defaultZone: http://eureka6001.com/eureka/,http://eureka6002.com


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69976870/viewspace-2711023/,如需轉載,請註明出處,否則將追究法律責任。

相關文章