## Eureka 簡介 Eureka 是一個基於 REST 的服務發現組件,SpringCloud 將它集成在其子項目 spring-cloud-netflix 中,以實現 SpringCloud 的服務註冊與發現,同時提供了負載均衡、故障轉移等能力,目前 Eureka2.0 已經不再維護,故不推 ...
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/
,可以看到兩個註冊中心已經分別註冊了