1. 程式人生 > >連載:1-spring-cloud-eureka

連載:1-spring-cloud-eureka

服務註冊和發現Eureka
GitHub地址:https://github.com/NullPointer8023/eureka

一、什麼是Eureka
1、和consul、zookeeper類似,eureka是一個用於服務註冊和發現的元件。Eureka分為Eureka Server和Eureka Client,Eureka Service服務註冊中心,Eureka Client為Eureka客戶端。

Eureka和其他元件,比如負載均衡元件Ribbon、熔斷器元件Hystrix、閘道器zuul相互配合,能夠很容易實現服務註冊、負載均衡、熔斷和智慧路由等功能,以上統稱為Spring Cloud Netflix,是spring cloud微服務的核心元件,也是基礎元件。

2、基本架構

  • Register Service:服務註冊中心,它是一個Eureka Server,提供服務註冊和發現功能。
  • Provider Service:服務提供者,它是一個Eureka Client,提供服務。
  • Consumer Service:服務消費者,它是一個Eureka Client,消費服務。

3、服務消費的基本過程
首先需要一個服務註冊中心Eureka Server,服務提供者Eureka Client向服務註冊中心Eureka Server註冊,將自己的資訊(服務名和服務IP地址等)通過REST API的形式提交給服務註冊中心Eureka Server。同樣,服務消費者Eureka Client也向服務註冊中心Eureka Server註冊,同時服務消費者獲取一份服務註冊列表的資訊,該列表包含了所有向服務註冊中心Eureka Server註冊的服務資訊。獲取服務註冊列表資訊之後,服務消費者就知道服務提供者的IP地址,可以通過HTTP遠端排程來消費服務提供者的服務。

二、編寫Eureka Server
1、配置pom.xml
引入spring-cloud-starter-eureka-server

2、EurekaServerApplication入口主類
類上新增@EnableEurekaServer註解,開啟Eureka Server的功能

3、application.properties
server.port=8761
eureka.instance.hostname=localhost
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
eureka.client.healthcheck.enabled=true
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

啟動程式啟動類,在瀏覽器上訪問Eureka Server的主介面http://localhost:8761

三、編寫Eureka Client
1、配置pom.xml
引入spring-cloud-starter-eureka

2、EurekaClientApplication入口主類
類上新增@EnableEurekaClient註解,開啟Eureka Client的功能

3、application.properties
server.port: 8764
spring.application.name: eureka-client
eureka.client.serviceUrl.defaultZone=http://peer1:8761/eureka
eureka.client.healthcheck.enabled=true #註冊中心健康檢查
eureka.instance.lease-renewal-interval-in-seconds=2
eureka.instance.lease-expiration-duration-in-seconds=6

同時啟動server、client程式啟動類,在瀏覽器上訪問Eureka Server的主介面http://localhost:8761,發現client已經註冊到server中。

四、原始碼解析Eureka
Eureka的一些概念
1、Register—服務註冊
當Eureka Client向Eureka Server註冊時,Eureka Client提供自身的元資料,比如IP地址、埠、執行狀況指標的Url、主頁地址等資訊。
2、Renew—服務續約
Eureka Client在預設的情況下會每隔30秒傳送一次心跳來進行服務續約。通過服務續約來告知Eureka Server該Eureka Client仍然可用,沒有出現故障。正常情況下,Server在90秒內沒有收到Client的心跳,Server會將Client例項從註冊列表中刪除。【官方建議不要修改服務續約時間間隔】
3、Fetch Registries—獲取服務註冊列表資訊
4、Cancel—服務下線
5、Eviction—服務剔除
預設情況下,當Client連續90秒沒有向Server傳送服務續約時,service會將服務例項從服務註冊列表刪除,即服務刪除。

五、Eureka的高可用架構
架構中有兩個角色,即Eureka Server和Eureka Client,而Eureka Client又分為Application Service和Application Client。
實際專案中,Eureka Server會承擔非常高的負載,所以針對Eureka Server進行高可用叢集。
服務叢集化,彼此之間服務共享,可以通過搭建叢集服務的方式,實現註冊服務的高可用
1、application.properties
該配置採用多profile的格式
2、多server啟動,模擬多服務提供
3、在client服務的properties中,將多個服務配置到defaultZone中
4、hosts檔案中配置peer1、peer2、peer3的host
127.0.0.1 peer1 peer2 peer3
程式碼git地址【https://github.com/NullPointer8023/eureka】
在這裡插入圖片描述

六、搭建過程遇到的問題
1、Eureka Server的配置檔案需要遮蔽自己註冊自己的問題,新增如下配置:
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
2、訪問地址:
http://peer1:8761而不是http://peer1:8761/eureka