1. 程式人生 > >eureka服務註冊與發現:(一)搭建註冊中心

eureka服務註冊與發現:(一)搭建註冊中心

hostname dubbo efault 必須 技術分享 不存在 dea bsp 啟用

最近由於工作中需要將原來的spring項目都進行架構調整,要實現應用解耦,所以考慮到通過微服務的方式將應用解耦。所以面臨兩個選擇:dubbo 和spring cloud ,由於項目規模不大,使用dubbo使項目變得有點重,基於項目輕量化的原則,選擇了 eureka 來治理服務。

首先用一張圖展示 eureka 架構

技術分享圖片

圖中的Eureka Server 為註冊中心, 它主要負責服務的註冊、服務管理、對客戶端提供服務列表。

spring cloud 為開發者提供了快速構建的工具,所以搭建服務註冊中心也變得很簡單。

1. 構建工程

通過IDEA 構建spring boot 工程,我用的是 2.0.3.RELEASE,pom 引入依賴

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
properties 中添加spring cloud 的版本 <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>

引入 spring boot 依賴管理
<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>

2. 註冊中心配置

配置 application.properties

spring.application.name=eureka-server
#正式環境應該啟用IP更容易區分
#eureka.instance.prefer-ip-address=true
eureka.instance.hostname=localhost
#eureka.client.register-with-eureka=fasle
#eureka.client.fetch-registry=false
#eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

# 自我保護:統計心跳失敗比例在15分鐘內是否低於85%;如果低於,會將當前實例的註冊信息保護起來,使服務信息不會過期,
# 如果客戶端在此期間拿到實際上已經不存在的服務實例,會出現調用失敗的情況,所以客戶端必須要有容錯機制,比如斷路器等機制
# 測試時關閉自我保護機制,保證不可用服務及時踢出,正式環境應開啟
eureka.server.enable-self-preservation=false

在主類上加上註解 @EnableEurekaServer ,然後啟動,一個單機版的註冊中心就已完成,預覽效果:

技術分享圖片

紅色提示是因為沒有開啟自我保護。

3. 集群模式

還是通過第一張圖我們看到有三個服務中心,每個中心之間是可以互相通信的,這個過程叫做 Replicate ,就是復制註冊的意思。每個註冊中心會將自己當前實例中已註冊的服務通過復制的方式註冊到其他節點,註冊中心的高可用其實就是每個註冊中心自己把自己作為服務向其他註冊中心註冊自己,這樣就形成了一組相互註冊的服務註冊中心。

修改hosts ,配置三個 hostname

127.0.0.1 server1

127.0.0.1 server2

127.0.0.1 server3

在集群模式下,修改 applocation.peoperties 配置

#要達到高可用,spring.application.name 每個實例必須配置一樣, 以及下面的兩個配置必須註釋,自定義也不行
#eureka.client.register-with-eureka=true
#eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://server2:8082/eureka/, http://server3:8083/eureka/
defaultZone 需要指向別的服務註冊中心才會把它註冊到別的註冊中心進行服務復制通信,server1中指向server2和server3 ,server2 中指向server1和server3 ,一次類推 

eureka服務註冊與發現:(一)搭建註冊中心