Eureka 是 Netflix 開發的,一個基於 REST 服務的,服務註冊與發現的組件git
它主要包括兩個組件:Eureka Server 和 Eureka Clientgithub
Eureka Client:一個Java客戶端,用於簡化與 Eureka Server 的交互(一般就是微服務中的客戶端和服務端)
Eureka Server:提供服務註冊和發現的能力(一般就是微服務中的註冊中心)spring
各個微服務啓動時,會經過 Eureka Client 向 Eureka Server 註冊本身,Eureka Server 會存儲該服務的信息緩存
也就是說,每一個微服務的客戶端和服務端,都會註冊到 Eureka Server,這就衍生出了微服務相互識別的話題spring-boot
同步:每一個 Eureka Server 同時也是 Eureka Client(邏輯上的)
多個 Eureka Server 之間經過複製的方式完成服務註冊表的同步,造成 Eureka 的高可用
識別:Eureka Client 會緩存 Eureka Server 中的信息
即便全部 Eureka Server 節點都宕掉,服務消費者仍可以使用緩存中的信息找到服務提供者(筆者已親測)
續約:微服務會週期性(默認30s)地向 Eureka Server 發送心跳以Renew(續約)信息(相似於heartbeat)
續期:Eureka Server 會按期(默認60s)執行一次失效服務檢測功能
它會檢查超過必定時間(默認90s)沒有Renew的微服務,發現則會註銷該微服務節點
Spring Cloud 已經把 Eureka 集成在其子項目 Spring Cloud Netflix 裏面微服務
關於 Eureka 配置的最佳實踐,可參考:https://github.com/spring-cloud/spring-cloud-netflix/issues/203fetch
更多介紹,可參考:http://cloud.spring.io/spring-cloud-static/Camden.SR4/#spring-cloud-eureka-serverspa
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
註冊中心,啓動類code
@SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
註冊中心配置文件server
server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://localhost:${server.port}/eureka/ spring.cloud.config.discovery.enabled: true