Eureka是Netflix提供的開源產品,用於服務注冊和發現的注冊中心。是SpringCloud體系的重要核心組件。
背景
注冊中心是管理各種服務的一個服務模塊 ,在一個分布式微服務系統中,通過注冊中心對其他服務進行注冊、發現、熔斷、負載、降級等處理,以實現整個分布式微服務系統的平穩、高效的運行。
服務A調用服務B
普通系統服務間調用:
注冊中心系統中調用:
服務A 調用服務B ,服務B調用服務C
普通系統服務間調用:
注冊中心系統中調用:
原理
Spring Cloud 封裝了 Netflix 公司開發的 Eureka 模塊來實現服務注冊和發現。Eureka 采用了 C-S 的設計架構。Eureka Server 作為服務注冊功能的服務器,它是服務注冊中心。而系統中的其他微服務,使用 Eureka 的客戶端連接到 Eureka Server,並維持心跳連接。這樣系統的維護人員就可以通過 Eureka Server 來監控系統中各個微服務是否正常運行。Spring Cloud 的一些其他模塊(比如Zuul)就可以通過 Eureka Server 來發現系統中的其他微服務,並執行相關的邏輯。
Eureka由兩個組件組成:Eureka服務器和Eureka客戶端。Eureka服務器用作服務注冊服務器。Eureka客戶端是一個java客戶端,用來簡化與服務器的交互、作為輪詢負載均衡器,並提供服務的故障切換支持。Netflix在其生產環境中使用的是另外的客戶端,它提供基於流量、資源利用率以及出錯狀態的加權負載均衡。
Eureka的基本架構:
1、Eureka Server :提供服務注冊和發現;
2、Service Provider:提供服務,將自身注冊到Eureka,便於消費都調用;
3、Service Consumer:消費服務,從Eureka獲取服務列表,以調用服務;
案例
1. eureka項目結構:
2. pom.xml文件如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <groupId>com.wei</groupId> 7 <artifactId>CloudEurekaServer</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 <packaging>jar</packaging> 10 11 <name>CloudEurekaServer</name> 12 <description>Demo project for Spring Boot</description> 13 14 <parent> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-parent</artifactId> 17 <version>2.0.1.RELEASE</version> 18 <relativePath /> <!-- lookup parent from repository --> 19 </parent> 20 21 <properties> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 23 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 24 <java.version>1.8</java.version> 25 <spring-cloud.version>Finchley.M9</spring-cloud.version> 26 </properties> 27 28 <dependencies> 29 <dependency> 30 <groupId>org.springframework.cloud</groupId> 31 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> 32 </dependency> 33 34 <dependency> 35 <groupId>org.springframework.boot</groupId> 36 <artifactId>spring-boot-starter-test</artifactId> 37 <scope>test</scope> 38 </dependency> 39 </dependencies> 40 41 <dependencyManagement> 42 <dependencies> 43 <dependency> 44 <groupId>org.springframework.cloud</groupId> 45 <artifactId>spring-cloud-dependencies</artifactId> 46 <version>${spring-cloud.version}</version> 47 <type>pom</type> 48 <scope>import</scope> 49 </dependency> 50 </dependencies> 51 </dependencyManagement> 52 53 <build> 54 <plugins> 55 <plugin> 56 <groupId>org.springframework.boot</groupId> 57 <artifactId>spring-boot-maven-plugin</artifactId> 58 </plugin> 59 </plugins> 60 </build> 61 62 <repositories> 63 <repository> 64 <id>spring-milestones</id> 65 <name>Spring Milestones</name> 66 <url>https://repo.spring.io/milestone</url> 67 <snapshots> 68 <enabled>false</enabled> 69 </snapshots> 70 </repository> 71 </repositories> 72 73 </project>
3. application.properties(可以采用yml形式)配置如下:
1 # 服務名 2 spring.application.name=cloud-eureka-server 3 # 服務端口 4 server.port=9000 5 6 # 指示此實例是否應將其信息注冊到eureka服務器以供其他人發現。在某些情況下,您不希望發現實例,而您只想發現其他實例。 7 eureka.client.register-with-eureka=false 8 # 指示該客戶端是否應從eureka服務器獲取eureka注冊表信息。 9 eureka.client.fetch-registry=false 10 11 eureka.client.service-url.defaultZone=http://localhost:${server.port}/eureka/ 12 13 # 關閉服務保護機制 14 eureka.server.enable-self-preservation=false 15 # 清理無效節點時間間隔(單位毫秒,默認是60*1000) 16 eureka.server.eviction-interval-timer-in-ms=30000
4.項目主類CloudEurekaServerApplication.java的內容:
package com.wei; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; /** * cloud系統 Eureka注冊中心 * * @author wgm * @date 2018年8月24日 */ @SpringBootApplication @EnableEurekaServer public class CloudEurekaServerApplication { public static void main(String[] args) { SpringApplication.run(CloudEurekaServerApplication.class, args); } }
5.運行項目后,在本地瀏覽器訪問:http://localhost:9000/eureka/ 即可看到注冊中心頁面,至此,最簡單的eureka注冊中心完成。