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通過心跳檢查、用戶端緩存等機制,確定了系統的高可用性、靈活性和可伸縮性。
将cloud版本鎖定到父pom中
dependencyManagement 鎖版本
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring‐cloud‐dependencies</artifactId>
<version>Finchley.M9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Eureka 服務端配置:
1 pom配置:
2 application.yml:<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring‐cloud‐starter‐netflix‐eureka‐server</artifactId> </dependency> </dependencies>
3. 啟動類server: port: 5858 #服務端口 eureka: client: register-With-Eureka: false #是否将自己注冊到Eureka服務中,本身就是伺服器是以無需注冊 fetch-registry: false #是否從Eureka服務中擷取注冊資訊 service-url: #Eureka用戶端與Eureka服務端進行互動的位址 defaultZone: http://127.0.0.1:${server.port}/eureka/ #釋出完成後,這個位址就是eureka通路位址
@SpringBootApplication @EnableEurekaServer public class EurekaServer { public static void main(String[] args) { SpringApplication.run(EurekaServer.class, args); } }
服務調用-Netflix Feign
将所有的微服務都注冊到Eureka中,這樣所有的微服務之間都可以互相調用.
1. pom.xml配置2. 在application.ym添加注冊eureka服務的配置<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring‐cloud‐starter‐netflix‐eureka‐client</artifactId> </dependency>
eureka: client: service‐url: defaultZone: http://localhost:5858/eureka instance: prefer‐ip‐address: true #這個不寫,隻能在本地測試,線上有可能調不通
3. 啟動類添加注解
@EnableEurekaClient
4. 啟動測試:将每個微服務啟動起來,會發現eureka的注冊清單中就能看到這些微服務.