天天看點

Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】服務注冊中心叢集相關閱讀參考

Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】

 發表于 2018-04-15 |  更新于 2018-05-07 | 

上一篇主要介紹了相關理論,這一篇開始我們來一個個的實踐一下。

Just code it.

本系列介紹的配置均基于 Spring Boot 2.0.1.RELEASE 版本和 Spring Cloud Finchley.RC1 版本

服務注冊中心

Spring Cloud 已經幫我們實作了服務注冊中心,我們隻需要很簡單的幾個步驟就可以完成。

首先我們建立一個 Spring Boot 工程,名字就叫 eureka-server,可以直接使用 Spring Initializr 建立

Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】服務注冊中心叢集相關閱讀參考

也可以直接在 pom.xml 中引入以下依賴

複制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
      
<parent>
    <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.0.1.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 <spring-cloud.version>Finchley.RC1</spring-cloud.version>
</properties>

<dependencies>
 <dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
 </dependency>

 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 </dependency>
</dependencies>

<dependencyManagement>
 <dependencies>
 <dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-dependencies</artifactId>
 <version>${spring-cloud.version}</version>
 <type>pom</type>
 <scope>import</scope>
 </dependency>
 </dependencies>
</dependencyManagement>

<build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
 </plugins>
</build>
      

通過

@EnableEurekaServer

注解啟動一個服務注冊中心提供給其他應用進行對話。這一步非常的簡單,隻需要在一個普通的 Spring Boot 應用中添加這個注解就能開啟此功能,比如

複制

1
2
3
4
5
6
7
8
      
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

 public static void main(String[] args) {
 SpringApplication.run(EurekaServerApplication.class, args);
 }
}
      

在預設設定下,該服務注冊中心也會将自己作為用戶端來嘗試注冊它自己,是以我們需要禁用它的用戶端注冊行為,隻需要在 application.yml 配置檔案中增加如下資訊:

複制

1
2
3
4
5
6
7
8
9
10
11
12
13
      
spring:
  application:
 name: eureka-server
server:
 port: 7000
eureka:
 instance:
 hostname: localhost
 client:
 register-with-eureka: false
 fetch-registry: false
 service-url:
 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      
  • server.port

    :為了與後續要進行注冊的服務區分,這裡将服務注冊中心的端口設定為 7000。
  • eureka.client.register-with-eureka

    :表示是否将自己注冊到 Eureka Server,預設為 true。
  • eureka.client.fetch-registry

    :表示是否從 Eureka Server 擷取注冊資訊,預設為 true。
  • eureka.client.service-url.defaultZone

    :設定與 Eureka Server 互動的位址,查詢服務和注冊服務都需要依賴這個位址。預設是 http://localhost:8761/eureka ;多個位址可使用英文逗号(,)分隔。

啟動工程後,通路 http://localhost:7000/,可以看到下面的頁面,其中還沒有發現任何服務

Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】服務注冊中心叢集相關閱讀參考

叢集

注冊中心這麼關鍵的服務,如果是單點話,遇到故障就是毀滅性的。在一個分布式系統中,服務注冊中心是最重要的基礎部分,理應随時處于可以提供服務的狀态。為了維持其可用性,使用叢集是很好的解決方案。Eureka 通過互相注冊的方式來實作高可用的部署,是以我們隻需要将 Eureke Server 配置其他可用的 service-url 就能實作高可用部署。

雙節點注冊中心

首先我們嘗試一下雙節點的注冊中心的搭建。

1、我們将之前的 application.yml 複制一份并命名為 application-peer1.yml,作為 peer1 服務中心的配置,并将 service-url 指向 peer2

複制

1
2
3
4
5
6
7
8
9
10
11
12
13
      
spring:
  application:
 name: eureka-server
server:
 port: 7001
eureka:
 instance:
 hostname: peer1
 client:
 register-with-eureka: true
 fetch-registry: true
 service-url:
 defaultZone: http://peer2:7002/eureka/
      

2、将之前的 application-peer1.yml 複制一份并命名為 application-peer2.yml,作為 peer2 服務中心的配置,并将 service-url 指向 peer1

複制

1
2
3
4
5
6
7
8
9
10
11
12
13
      
spring:
  application:
 name: eureka-server
server:
 port: 7002
eureka:
 instance:
 hostname: peer2
 client:
 register-with-eureka: true
 fetch-registry: true
 service-url:
 defaultZone: http://peer1:7001/eureka/
      

3、配本地 host:

在 hosts 檔案中加入如下配置

複制

1
      
127.0.0.1 peer1 peer2
      

4、打包啟動

依次執行下面指令

複制

1
2
3
4
5
6
      
# 打包
mvn clean package  -Dmaven.test.skip=true

# 分别以 peer1 和 peer2 配置資訊啟動 Eureka
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
      
在剛啟動 peer1 的時候,啟動完成後會在控制台看到一些異常資訊,大緻就是拒絕連接配接、請求逾時這一類的,這個不用管,啟動 peer2 後就好了。

依次啟動完成後,通路 http://localhost:7001/,效果如下

Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】服務注冊中心叢集相關閱讀參考

根據圖可以看出 peer1 的注冊中心 DS Replicas 已經有了 peer2 的相關配置資訊,并且出現在 available-replicas 中。我們手動停止 peer2 來觀察,發現 peer2 就會移動到 unavailable-replicas 一欄中,表示 peer2 不可用。

Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】服務注冊中心叢集相關閱讀參考

到此雙節點的配置已經完成。

注意事項

  • 在搭建 Eureka Server 雙節點或叢集的時候,要把

    eureka.client.register-with-eureka

    eureka.client.fetch-registry

    均改為

    true

    (預設)。否則會出現執行個體清單為空,且 peer2 不在 available-replicas 而在 unavailable-replicas 的情況(這時其實隻是啟動了兩個單點執行個體)。如果是像我這樣圖省事把之前的單節點配置和雙節點的配置放在一個工程裡,雙節點的配置裡要顯示設定以上兩個參數,直接删除是用不了預設配置的——Spring profile 會繼承未在子配置裡設定的父配置(application.yml)中的配置。
  • 在注冊的時候,配置檔案中的

    spring.application.name

    必須一緻,否則情況會是這樣的
    Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】服務注冊中心叢集相關閱讀參考

Eureka 叢集使用

在生産中我們可能需要三台或者大于三台的注冊中心來保證服務的穩定性,配置的原理其實都一樣,将注冊中心分别指向其它的注冊中心。這裡隻介紹三台叢集的配置情況,其實和雙節點的注冊中心類似,每台注冊中心分别又指向其它兩個節點即可。

application-peer1.yml

複制

1
2
3
4
5
6
7
8
9
10
11
      
spring:
  application:
 name: eureka-server
server:
 port: 7001
eureka:
 instance:
 hostname: peer1
 client:
 service-url:
 defaultZone: http://peer2:7002/eureka/,http://peer3:7003/eureka/
      

application-peer2.yml

複制

1
2
3
4
5
6
7
8
9
10
11
      
spring:
  application:
 name: eureka-server
server:
 port: 7002
eureka:
 instance:
 hostname: peer2
 client:
 service-url:
 defaultZone: http://peer1:7001/eureka/,http://peer3:7003/eureka/
      

application-peer3.yml

複制

1
2
3
4
5
6
7
8
9
10
11
      
spring:
  application:
 name: eureka-server
server:
 port: 7003
eureka:
 instance:
 hostname: peer3
 client:
 service-url:
 defaultZone: http://peer1:7001/eureka/,http://peer2:7002/eureka/
      

修改 hosts 檔案中的配置,添加 peer3

複制

1
      
127.0.0.1 peer1 peer2 peer3
      

分别以 peer1、peer2、peer3 的配置參數啟動 Eureka 注冊中心

複制

1
2
3
      
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar  --spring.profiles.active=peer1
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar  --spring.profiles.active=peer2
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar  --spring.profiles.active=peer3
      

依次啟動完成後,通路 http://localhost:7001/,效果如下

Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】Spring Cloud(二):服務注冊與發現 Eureka【Finchley 版】服務注冊中心叢集相關閱讀參考

可以在 peer1 中看到了 peer2、peer3 的相關資訊,至此 Eureka 叢集也已經完成了。

注冊中心 Eureka 就介紹到這裡,下一節我們将利用我們搭建的 Eureka Server 來為服務提供者 / 調用者提供注冊 / 發現服務。

相關閱讀

Spring Cloud(一):服務治理技術概覽

Spring Cloud(二):服務注冊與發現 Eureka

Spring Cloud(三):服務提供與調用 Eureka

Spring Cloud(四):服務容錯保護 Hystrix

Spring Cloud(五):Hystrix 監控面闆

Spring Cloud(六):Hystrix 監控資料聚合 Turbine

Spring Cloud(七):配置中心(Git 版與動态重新整理)

Spring Cloud(八):配置中心(服務化與高可用)

Spring Cloud(九):配置中心(消息總線)

Spring Cloud(十):服務網關 Zuul(路由)

Spring Cloud(十一):服務網關 Zuul(過濾器)

Spring Cloud(十二):分布式鍊路跟蹤(Sleuth 與 Zipkin)

示例代碼:GitHub

參考

springcloud(二):注冊中心 Eureka

Spring Cloud 建構微服務架構:服務注冊與發現(Eureka、Consul)【Dalston 版】

Spring Cloud 技術分析(1)——服務治理

Spring Cloud - Peer Awareness

  • 本文作者: Yibo
  • 本文連結: https://windmt.com/2018/04/15/spring-cloud-2-eureka/
  • 版權聲明: 本部落格所有文章除特别聲明外,均采用 CC BY-NC-SA 4.0 許可協定。轉載請注明出處!

轉載于:https://www.cnblogs.com/chenweida/p/9025615.html