Eureka是Netflix開發的服務發現框架,現在是Spring Cloud生態系統的一部分。它主要用于AWS云平臺,用來定位服務,以實現中間層服務器的負載均衡和故障轉移。在微服務架構中,服務發現是關鍵的一環,它允許服務和服務彼此發現并通信,這樣客戶端就不需要硬編碼目標服務的位置。
Eureka的主要組件:
Eureka由兩個主要組件組成:Eureka Server和Eureka Client。
Eureka Server
Eureka Server充當服務注冊中心。它是一個服務發現機制的核心,所有可用服務的實例都在此注冊,并通過心跳機制保持注冊信息是最新的。Eureka Server提供了一個REST API,可供服務實例注冊或用戶查詢當前注冊的服務列表。
要創建Eureka Server,你需要一個Spring Boot應用程序,并使用@EnableEurekaServer注解啟用Eureka Server功能:
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}
在application.yml
中配置Eureka Server:
server:port: 8761eureka:client:registerWithEureka: falsefetchRegistry: falseserviceUrl:defaultZone: http://localhost:8761/eureka/
上述配置啟動了一個運行在端口8761上的Eureka Server,并通過設置registerWithEureka: false和fetchRegistry: false告訴它不要嘗試將自己注冊為客戶端或嘗試獲取注冊表。
Eureka Client
Eureka Client是一個Java客戶端,用于簡化與Eureka Server的交互。客戶端服務在啟動時向Eureka Server注冊自身,并定期發送心跳來維持其在注冊表中的狀態。
要使應用成為Eureka Client,你需要在Spring Boot應用上添加@EnableEurekaClient或@EnableDiscoveryClient注解:
?
@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication {public static void main(String[] args) {SpringApplication.run(EurekaClientApplication.class, args);}
}
?
工作原理:
服務注冊:當Eureka Client啟動時,它會向Eureka Server發送一個注冊請求,將其自身的網絡地址等信息注冊到Eureka Server。
服務續約:Eureka Client定期向Eureka Server發送心跳(默認每30秒一次)來維持其在注冊表中的狀態。如果Eureka Server在一定時間內(默認90秒)沒有接收到某個實例的心跳,它將注銷該實例。
服務下線:當Eureka Client正常關閉時,它會向Eureka Server發送一個下線請求,告知Eureka Server自己將要下線。
獲取注冊的服務:Eureka Client可以從Eureka Server獲取當前所有注冊服務的信息列表,客戶端內部會緩存這個信息列表,并周期性地更新。
服務副本:Eureka Server可以運行多個實例,它們之間相互復制注冊信息,形成高可用集群。
通過Eureka的這些機制,Spring Cloud應用可以實現自動化的服務注冊、發現和狀態維護,這極大地簡化了分布式系統中的網絡通信和基礎設施管理。