天天看點

SpringCloud二:Eureka(服務發現元件)

Eureka

Eureka

是Netflix開發的服務發現架構,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服務端

(1)建立javakf_eureka子產品

(2)引入依賴父工程pom.xml定義SpringCloud版本

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>Greenwich.SR3</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>
           
(3)javakf_eureka子產品pom.xml引入eureka-server
<dependencies>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
	</dependency>
</dependencies>
           
(4)添加application.yml
server:
  port: 8888 #服務端口
eureka:
  client:
    registerWithEureka: false #是否将自己注冊到Eureka服務中,本身就是所有無需注冊
    fetchRegistry: false #是否從Eureka中擷取注冊資訊
    serviceUrl: #Eureka用戶端與Eureka服務端進行互動的位址
      defaultZone: http://127.0.0.1:${server.port}/eureka/
           
(5)編寫啟動類
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaApplication.class);
	}
}
           
(6)啟動運作啟動類,然後在浏覽器位址欄輸入 http://localhost:8888/ 運作效果如下:
SpringCloud二:Eureka(服務發現元件)
主界面中
  • system status為系統資訊
  • General Info為一般資訊
  • Instances currently
  • registered with Eureka為注冊到的所有微服務清單

Eureka用戶端

現在就将所有的微服務都注冊到Eureka中,這樣所有的微服務之間都可以互相調用了。

(1)将其他微服務子產品添加依賴
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
           
(2)修改每個微服務的application.yml,添加注冊eureka服務的配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka
           
(3)修改每個服務類的啟動類,添加注解

@EnableEurekaClient

(4)啟動測試:将每個微服務啟動起來,會發現eureka的注冊清單中可以看到這些微服務了
SpringCloud二:Eureka(服務發現元件)

保護模式

如果在Eureka Server的首頁看到以下這段提示,則說明Eureka已經進入了保護模式:

SpringCloud二:Eureka(服務發現元件)

Eureka Server在運作期間,會統計心跳失敗的比例在15分鐘之内是否低于85%,如果出現低于的情況(在單機調試的時候很容易滿足,實際在生産環境上通常是由于網絡不穩定導緻),Eureka Server會将目前的執行個體注冊資訊保護起來,同時提示這個警告。保護模式主要用于一組用戶端和Eureka Server之間存在網絡分區場景下的保護。一旦進入保護模式,Eureka Server将會嘗試保護其服務系統資料庫中的資訊,不再删除服務系統資料庫中的資料(也就是不會登出任何微服務)。

繼續閱讀