Eureka 簡介
Eureka 是一個基于 REST 的服務發現組件,SpringCloud 將它集成在其子項目 spring-cloud-netflix 中,以實現 SpringCloud 的服務注冊與發現,同時提供了負載均衡、故障轉移等能力,目前 Eureka2.0 已經不再維護,故不推薦使用
Eureka 有兩種角色組件:
- Eureka Server:服務注冊中心組件,提供了服務的注冊與發現的接口
- Eureka Client:各種微服務,把自身的服務實例注冊到 Eureka Server 中,也可通過 Eureka Server 獲取服務列表,消費服務
微服務客戶端在 Eureka 上注冊,然后每隔 30 秒發送心跳來更新它們的租約。如果客戶端不能多次續訂租約,就將在大約 90 秒內從服務器注冊表中剔除。注冊信息和更新被復制到集群中的所有 Eureka 節點,來自任何區域的客戶端都可以查找注冊表信息(每30秒發生一次)來定位它們的服務并進行遠程調用
搭建 Eureka 注冊中心
創建 eureka-server 項目,引入依賴,本項目基于 SpringBoot 2.3.1,SpringCloud Hoxton.SR12
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>...
<dependencies>
在啟動類上添加 @EnaleEurekaServer
注解,啟用 Euerka 注冊中心功能
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}
在配置文件添加 Eureka 服務端的配置
server:port: 8001 # 指定運行端口spring:application:name: eureka-server # 指定服務名稱eureka:instance:hostname: localhost # 指定主機名稱client:fetch-registry: false # 指定能否從注冊中心獲取服務register-with-eureka: false # 指定是否將服務注冊到注冊中心
運行 main 方法啟動服務,在瀏覽器中訪問 http://localhost:8001/
便可以看到 Eureka 注冊中心的界面
創建 eureka-client 項目,引入依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在啟動類上添加 @EnableDiscoveryClient
注解,表明是一個 Eureka 客戶端
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientApplication {public static void main(String[] args) {SpringApplication.run(EurekaClientApplication.class, args);}
}
在配置文件添加 Eureka 客戶端的配置
server:port: 8101 # 指定運行端口spring:application:name: eureka-client # 指定服務名稱eureka:client:fetch-registry: true # 指定能否從注冊中心獲取服務register-with-eureka: true # 指定是否將服務注冊到注冊中心service-url:defaultZone: http://localhost:8001/eureka
運行 main 方法,啟動 eureka-client 項目,刷新 http://localhost:8001/
頁面,即可看到 cureka-client 已經注入 Eurcka 服務
搭建 Eureka 注冊中心集群
由于所有服務都會注冊到注冊中心,服務之間的調用都是通過從注冊中心獲取服務列表來調用的。注冊中心一旦宕機,所有服務調用都會出現問題,因此需要多個注冊中心組成集群來提供服務
創建兩個 eureka-server 項目,eureka-server-1 項目的配置文件如下:
server:port: 8002 # 指定運行端口spring:application:name: eureka-server-1 # 指定服務名稱eureka:instance:hostname: localhost # 指定主機名稱client:fetch-registry: true # 指定能否從注冊中心獲取服務register-with-eureka: true # 指定是否將服務注冊到注冊中心service-url:defaultZone: http://localhost:8003/eureka/
eureka-server-2 項目的配置文件如下:
server:port: 8003 # 指定運行端口spring:application:name: eureka-server-1 # 指定服務名稱eureka:instance:hostname: localhost # 指定主機名稱client:fetch-registry: true # 指定能否從注冊中心獲取服務register-with-eureka: true # 指定是否將服務注冊到注冊中心service-url:defaultZone: http://localhost:8002/eureka/
通過兩個注冊中心互相注冊,搭建注冊中心的雙節點集群。分別啟動項目,查看 http://localhost:8001/
和 http://localhost:8002/
,可以看到兩個注冊中心已經分別注冊了