Eureka
Eureka
是Netflix開發的服務發現架構,SpringCloud将它內建在自己的子項目 spring-cloud-netflix中,實作SpringCloud的服務發現功能。Eureka包含兩個元件: Eureka Server和Eureka Client。
Eureka Server
提供服務注冊服務,各個節點啟動後,會在Eureka Server中進行注冊,這樣EurekaServer中的服務系統資料庫中将會存儲所有可用服務節點的資訊,服務節點 的資訊可以在界面中直覺的看到。
Eureka Client
是一個java用戶端,用于簡化與Eureka Server的互動,用戶端同時也 就别一個内置的、使用輪詢(round-robin)負載算法的負載均衡器。在應用啟動後,将會向Eureka Server發送心跳,預設周期為30秒,如果Eureka Server在多個心跳周期内沒有接收到某個節點的心跳,Eureka Server将會從服務系統資料庫中把這個服務節點移除(預設90 秒)。
Eureka Server之間通過複制的方式完成資料的同步,Eureka還提供了用戶端緩存機制,即使所有的Eureka Server都挂掉,用戶端依然可以利用緩存中的資訊消費其他服務的API。綜上,Eureka通過心跳檢查、用戶端緩存等機制,確定了系統的高可用性、靈活性和可伸縮性。
Eureka服務端
(1)建立javakf_eureka子產品
(2)引入依賴父工程pom.xml定義SpringCloud版本
(3)javakf_eureka子產品pom.xml引入eureka-server<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR3</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
(4)添加application.yml<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies>
(5)編寫啟動類server: port: 8888 #服務端口 eureka: client: registerWithEureka: false #是否将自己注冊到Eureka服務中,本身就是所有無需注冊 fetchRegistry: false #是否從Eureka中擷取注冊資訊 serviceUrl: #Eureka用戶端與Eureka服務端進行互動的位址 defaultZone: http://127.0.0.1:${server.port}/eureka/
(6)啟動運作啟動類,然後在浏覽器位址欄輸入 http://localhost:8888/ 運作效果如下:@SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class); } }
主界面中![]()
SpringCloud二:Eureka(服務發現元件)
- system status為系統資訊
- General Info為一般資訊
- Instances currently
- registered with Eureka為注冊到的所有微服務清單
Eureka用戶端
現在就将所有的微服務都注冊到Eureka中,這樣所有的微服務之間都可以互相調用了。
(1)将其他微服務子產品添加依賴(2)修改每個微服務的application.yml,添加注冊eureka服務的配置<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
(3)修改每個服務類的啟動類,添加注解eureka: client: service-url: defaultZone: http://localhost:8888/eureka
(4)啟動測試:将每個微服務啟動起來,會發現eureka的注冊清單中可以看到這些微服務了
@EnableEurekaClient
![]()
SpringCloud二:Eureka(服務發現元件)
保護模式
如果在Eureka Server的首頁看到以下這段提示,則說明Eureka已經進入了保護模式:
Eureka Server在運作期間,會統計心跳失敗的比例在15分鐘之内是否低于85%,如果出現低于的情況(在單機調試的時候很容易滿足,實際在生産環境上通常是由于網絡不穩定導緻),Eureka Server會将目前的執行個體注冊資訊保護起來,同時提示這個警告。保護模式主要用于一組用戶端和Eureka Server之間存在網絡分區場景下的保護。一旦進入保護模式,Eureka Server将會嘗試保護其服務系統資料庫中的資訊,不再删除服務系統資料庫中的資料(也就是不會登出任何微服務)。