服務治理 Spring Cloud Eureka
服務治理是微服務架構中最爲核心和基礎的模塊,主要用來實現各個微服務實例的自動化註冊與發現。Spring Cloud Eureka 是 Spring Cloud Netflix 微服務套件中的一部分,基於 Netflix Eureka 作了二次封裝,主要負責完成微服務架構中的服務治理功能。spring
- 服務註冊
在服務治理框架中一般都會構建一個註冊中心,每一個服務單元向註冊中心登記本身提供的服務,將端口,版本號,通訊協議等附加信息告知註冊中心,註冊中心按服務名分類組織服務清單。服務註冊中心還須要以心跳方式監測清單中的服務是否可用,不可用則從服務清單中剔除,達到排除故障服務的做用。
- 服務發現
在服務治理框架做用下,服務間的調用再也不經過指定具體的實例的地址來實現,而是經過向服務名發起請求調用實現。因此,服務調用方在調用服務提供方接口的時候,並不知道服務實例具體的位置,服務調用方須要向服務註冊中心諮詢服務,獲取全部的服務實例清單,實現對具體服務實例的訪問。
1. 搭建服務註冊中心(Eureka 服務端)
1.1 服務註冊中心搭建
- 建立Spring Boot 工程
- 添加依賴: spring-cloud-starter-eureka-server
- 使用
@EnableEurekaServer
開啓服務註冊中心
- 配置服務註冊中心
1.2 服務註冊中心配置
name |
description |
value |
spring.application.name |
服務名 |
- |
server.port |
端口 |
- |
eureka.instance.hostname |
主機名稱 |
- |
eureka.client.register-with-eureka |
是否向註冊中心註冊本身 |
false |
eureka.client.fetch-registry |
是否須要檢索服務 |
false |
eureka.client.service-url.defaultZone |
服務註冊中心地址 |
http://\({eureka.instance.hostname}:\){server.port}/eureka/ |
2. 註冊服務提供者(Eureka 客戶端)
2.1 服務提供者註冊
- 建立Spring Boot 工程
- 添加依賴: spring-cloud-starter-eureka-client
- 使用
@EnableDiscoveryClient
激活 discovery client
- 配置服務提供者
2.2 服務提供者配置
name |
description |
value |
spring.application.name |
服務名 |
- |
server.port |
端口 |
- |
eureka.client.service-url.defaultZone |
服務註冊中心地址 |
- |
3. 註冊服務消費者(Eureka 客戶端)
3.1 服務消費者註冊
- 建立Spring Boot 工程
- 添加依賴: spring-cloud-starter-eureka-client, spring-cloud-starter-ribbon
- 使用
@EnableDiscoveryClient
激活 discovery client,在主類中建立RestTemplate的Spring Bean實例,並經過@LoadBalanced
註解開啓客戶端負載均衡
- 配置服務提供者
3.2 服務消費者配置
name |
description |
value |
spring.application.name |
服務名 |
- |
server.port |
端口 |
- |
eureka.client.service-url.defaultZone |
服務註冊中心地址 |
- |
4. 高可用服務註冊中心
在分佈式環境中,須要充分考慮發生故障的狀況,因此在生產環境中必須對各個組件進行高可用部署,對於服務中心也同樣。在 Eureka 的服務治理設計中,全部節點既是服務提供方也是服務消費方,服務註冊中心也不例外。Eureka Server 高可用實際上就是將本身做爲服務向其它服務註冊中心註冊本身,造成一組互相註冊的註冊中心,實現服務清單互相同步,達到高可用效果。架構
4.1 高可用服務註冊中心配置
name |
description |
value |
spring.application.name |
服務名 |
- |
server.port |
端口 |
- |
eureka.instance.hostname |
主機名稱 |
- |
eureka.client.service-url.defaultZone |
服務註冊中心地址 |
其它服務註冊中心地址: url2,url3... |
4.2 服務提供方配置
name |
description |
value |
spring.application.name |
服務名 |
- |
server.port |
端口 |
- |
eureka.client.service-url.defaultZone |
服務註冊中心地址 |
其它服務註冊中心地址: url1,url2,url3... |
附. 經常使用配置
name |
description |
default |
spring.application.name |
服務名 |
- |
server.port |
端口 |
- |
eureka.instance.hostname |
主機名稱 |
- |
eureka.instance.lease-renewal-interval-in-seconds |
服務續約任務的調用間隔時間 |
30 |
eureka.instance.lease-expiration-duration-in-seconds |
服務失效時間 |
90 |
eureka.client.register-with-eureka |
是否向註冊中心註冊本身 |
true |
eureka.client.fetch-registry |
是否須要檢索服務 |
true |
eureka.client.service-url.defaultZone |
eureka server 分區地址 |
- |
eureka.server.enable-self-preservation |
是否開啓保護機制 |
- |