SpringCloud(一) 注冊中心Eureka配置


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*100016 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注冊中心完成。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM