亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring?Cloud?Eureka服務(wù)注冊(cè)中心入門流程分析

 更新時(shí)間:2022年06月21日 09:59:27   作者:、楽.  
這篇文章主要介紹了Spring?Cloud?Eureka服務(wù)注冊(cè)中心入門流程分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在學(xué)習(xí)Ribbon使用的時(shí)候,我們是直接在配置文件中寫死服務(wù)地址的,是不是特別的不方便?我們是不是需要一個(gè)統(tǒng)一的地方來維護(hù)這些服務(wù),以及這些配置發(fā)生變化后,我們不需要重啟服務(wù)。

所以這個(gè)時(shí)候需要引出一個(gè)新組件——eureka。

它主要可以幫助我們實(shí)現(xiàn)如下功能:

  • 地址的統(tǒng)一維護(hù)服務(wù)提供者的動(dòng)態(tài)上下線通知
  • 服務(wù)提供者可以將服務(wù)注冊(cè)到eureka上,eureka通過鍵值對(duì)的形式將信息進(jìn)行保存。

服務(wù)消費(fèi)者可以直接根據(jù)KEY去eureka上獲取服務(wù)即可。

這里我們首先來看下eureka的整體架構(gòu)圖,逐步分析下具有那些流程:

在這里插入圖片描述

Eureka 實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)的流程如下:

  • 搭建一個(gè) Eureka Server 作為服務(wù)注冊(cè)中心;
  • 服務(wù)提供者 Eureka Client 啟動(dòng)時(shí),會(huì)把當(dāng)前服務(wù)器的信息以服務(wù)名(spring.application.name)的方式注冊(cè)到服務(wù)注冊(cè)中心;
  • 服務(wù)消費(fèi)者 Eureka Client 啟動(dòng)時(shí),也會(huì)向服務(wù)注冊(cè)中心注冊(cè);
  • 服務(wù)消費(fèi)者還會(huì)獲取一份可用服務(wù)列表,該列表中包含了所有注冊(cè)到服務(wù)注冊(cè)中心的服務(wù)信息(包括服務(wù)提供者和自身的信息);這個(gè)列表會(huì)緩存到消費(fèi)者本地,然后會(huì)定時(shí)輪詢更新。
  • 在獲得了可用服務(wù)列表后,服務(wù)消費(fèi)者通過 HTTP 或消息中間件遠(yuǎn)程調(diào)用服務(wù)提供者提供的服務(wù)。
  • 然后在Eureka中還有一個(gè)心跳檢測(cè)機(jī)制,從而實(shí)現(xiàn)我們的動(dòng)態(tài)上下線感知。

項(xiàng)目搭建

了解了它的整體流程之后,我們來搭建一個(gè)Eureka服務(wù)。

搭建其實(shí)很簡(jiǎn)單,我們直接創(chuàng)建一個(gè)Spring Boot 項(xiàng)目即可,然后選擇Eureka Server依賴即可。

在這里插入圖片描述

最后只需在啟動(dòng)程序上添加@EnableEurekaServer注解即可。

這個(gè)時(shí)候啟動(dòng)項(xiàng)目即可進(jìn)入Eureka的控制面板。(默認(rèn)端口8761,創(chuàng)建完項(xiàng)目后自行修改)

在這里插入圖片描述

啟動(dòng)項(xiàng)目之后,大家可能會(huì)遇到如下錯(cuò)誤:Cannot execute request on any known server

在這里插入圖片描述

簡(jiǎn)單翻譯就是不能請(qǐng)求到任何確定的服務(wù)上。因?yàn)槲覀兊膃ureka-server本身既是服務(wù)提供者又是一個(gè)項(xiàng)目,所以我們也需要將他自己注冊(cè)上去,那如何自己注冊(cè)自己呢?

我們只需要通過如下命令制定好注冊(cè)中心的地址即可,然后重新啟動(dòng)項(xiàng)目,即可發(fā)現(xiàn)我們的服務(wù)已經(jīng)注冊(cè)上去了。這個(gè)地方的話可以不注冊(cè),因?yàn)闀?huì)默認(rèn)注冊(cè)到8761端口,但是如果搭建集群的話就需要我們自己指定了。

server.port=8761
# 指向服務(wù)注冊(cè)中心的地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

在這里插入圖片描述

我們也可以默認(rèn)不注冊(cè),添加如下配置信息:

# 是否要注冊(cè)
eureka.client.register-with-eureka=false
# 是否要更新注冊(cè)信息
eureka.client.fetch-registry=false

客戶端注冊(cè)

注冊(cè)中心搭建完成之后,我們需要將項(xiàng)目進(jìn)行注冊(cè),首先需要引入相關(guān)依賴:

<!--        eureka 客戶端注冊(cè)-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

然后需要進(jìn)行注冊(cè)地址的配置:

# 注冊(cè)中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

這個(gè)時(shí)候我們重新啟動(dòng)這些項(xiàng)目,即可發(fā)現(xiàn)他們已經(jīng)注冊(cè)到eureka上了。

在這里插入圖片描述

但是我們點(diǎn)擊后面的狀態(tài)時(shí),是看不到任何數(shù)據(jù)的,這個(gè)時(shí)候我們需要引入actuator。

<!--actuator-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

然后需要暴露相關(guān)端口,我這邊是直接暴露了所有,生產(chǎn)環(huán)境可不能這么操作。

management.endpoints.web.exposure.exclude=*

聚合層處理

既然我們已經(jīng)將各個(gè)模塊的項(xiàng)目注冊(cè)到eureka上了,我們?cè)诰酆蠈又芯筒恍枰谑褂脤懰赖呐渲眯畔⒘恕?/p>

我們將之前的配置信息注釋,然后將聚合層注冊(cè)到eureka上。這個(gè)時(shí)候可以發(fā)現(xiàn)我們的接口是可以正常下單的,說明我們的配置中心生效了,首先就完成了對(duì)地址信息統(tǒng)一維護(hù)的功能。

在這里插入圖片描述

這就是我們?yōu)槭裁匆雜pring cloud的原因,極大的減少了我們的工作量。

Eureka架構(gòu)

在這里插入圖片描述

上圖是Eureka的整體架構(gòu)的設(shè)計(jì)。

我們知道在微服務(wù)中,任何節(jié)點(diǎn)都是需要做高可用的,也就是不能是單節(jié)點(diǎn)。我們的Eureka也是,但是它的集群和我們之前接觸的集群是不同的,它沒有主從的概念,它所有的節(jié)點(diǎn)都是水平的,兩兩節(jié)點(diǎn)間的數(shù)據(jù)是可以相互復(fù)制的,任何一個(gè)客戶端都可以訪問任何一個(gè)節(jié)點(diǎn)。

因?yàn)镋ureka遵守的是一個(gè)AP理論,這里主要需要保持一個(gè)高可用性,因?yàn)槿绻侵鲝哪P?,我們?cè)谥鲝耐降臅r(shí)候,如果發(fā)生延遲就會(huì)存在短期不可用,所以為了保持高可用性,就采用了這種無中心化的集群節(jié)點(diǎn)。

上圖中的一些關(guān)鍵名詞說明如下:

  • Application Service: 作為Eureka Client,扮演了服務(wù)的提供者,提供業(yè)務(wù)服務(wù), 向Eureka Server注冊(cè)和更新自己的信息,同時(shí)能從Eureka Server的注冊(cè)表中獲取到 其他服務(wù)的信息。
  • Eureka Server: 扮演服務(wù)注冊(cè)中心的角色,提供服務(wù)注冊(cè)和發(fā)現(xiàn)的功能,每個(gè)Eureka Cient向Eureka Server注冊(cè)自己的信息,也可以通過Eureka Server獲取到其他服務(wù)的 信息達(dá)到發(fā)現(xiàn)和調(diào)用其他服務(wù)的目的。
  • Application Client: 作為Eureka Client,扮演了服務(wù)消費(fèi)者,通過Eureka Server獲取到注冊(cè)到上面的其他服務(wù)的信息,從而根據(jù)信息找到所需的服務(wù)發(fā)起遠(yuǎn)程調(diào) 用。
  • Replicate: Eureka Server中的注冊(cè)表信息的同步拷貝,保持不同的Eureka Server 集群中的注冊(cè)表中的服務(wù)實(shí)例信息的一致性。提供了數(shù)據(jù)的最終一致性。
  • Make Remote Call: 服務(wù)之間的遠(yuǎn)程調(diào)用。
  • Register: 注冊(cè)服務(wù)實(shí)例,Client端向Server端注冊(cè)自身的元數(shù)據(jù)以進(jìn)行服務(wù)發(fā)現(xiàn)。
  • Renew: 續(xù)約,通過發(fā)送心跳到Server維持和更新注冊(cè)表中的服務(wù)實(shí)例元數(shù)據(jù)的有效 性。當(dāng)在一定時(shí)長(zhǎng)內(nèi)Server沒有收到Client的心跳信息,將默認(rèn)服務(wù)下線,將服務(wù)實(shí)例 的信息從注冊(cè)表中刪除。
  • Cancel: 服務(wù)下線,Client在關(guān)閉時(shí)主動(dòng)向Server注銷服務(wù)實(shí)例元數(shù)據(jù),這時(shí)Client 的的服務(wù)實(shí)例數(shù)據(jù)將從Server的注冊(cè)表中刪除。

集群搭建

Eureka的集群搭建是很簡(jiǎn)單的,我們重新創(chuàng)建一個(gè)eureka-server模塊。和上文一樣的步驟即可,然后在配置文件中互相指定注冊(cè)地址。

eureka-server

# 應(yīng)用名稱
spring.application.name=eureka-server
server.port=8761
# 指向服務(wù)注冊(cè)中心的地址
eureka.client.service-url.defaultZone=http://localhost:8762/eureka
# 是否要注冊(cè)
#eureka.client.register-with-eureka=false
# 是否要更新注冊(cè)信息
#eureka.client.fetch-registry=false

eureka-server-replica

# 應(yīng)用名稱
spring.application.name=eureka-server-replica
server.port=8762

# 指向服務(wù)注冊(cè)中心的地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

然后啟動(dòng)項(xiàng)目,可以發(fā)現(xiàn)兩個(gè)項(xiàng)目已經(jīng)互相注冊(cè)了 。

由于我們之前的服務(wù)都是注冊(cè)到8761節(jié)點(diǎn)上的,這個(gè)時(shí)候我們隨便啟動(dòng)一個(gè)服務(wù),可以發(fā)現(xiàn)8762節(jié)點(diǎn)上也會(huì)有相應(yīng)的服務(wù)。
在這里插入圖片描述

我們需要讓其他服務(wù)也注冊(cè)到新的節(jié)點(diǎn)上嗎?其實(shí)是需要的,因?yàn)槲覀兪侨ブ行幕墓?jié)點(diǎn),所以如果8761節(jié)點(diǎn)掛了,那我們還能繼續(xù)注冊(cè)到8762節(jié)點(diǎn)上,保持我們的高可用性。多個(gè)節(jié)點(diǎn)我們只需要使用逗號(hào)隔開就可以。

eureka.client.service-url.defaultZone=http://localhost:8761/eureka,http://localhost:8762/eureka

多區(qū)域配置

我們搭建集群的時(shí)候?yàn)榱藢?shí)現(xiàn)災(zāi)備的功能,可以將各節(jié)點(diǎn)部署在不同的區(qū)域,然后客戶端獲取服務(wù)的時(shí)候可以從就近的區(qū)域獲取,如果就近區(qū)域節(jié)點(diǎn)宕機(jī)后照樣可以去獲取其他正常的節(jié)點(diǎn)服務(wù)。

在這里插入圖片描述

實(shí)現(xiàn)這個(gè)功能也很簡(jiǎn)單,接下來我們對(duì)各個(gè)項(xiàng)目進(jìn)行相關(guān)的配置。

我們這里主要對(duì)兩個(gè)eureka-server服務(wù)以及portal,goods-service項(xiàng)目進(jìn)行配置,首先因?yàn)槭欠謪^(qū),我們需要加上如下配置信息,表示地點(diǎn)在北京,以及北京地區(qū)的兩個(gè)區(qū)域機(jī)房。幾個(gè)項(xiàng)目都需要進(jìn)行如下的配置。

# 區(qū)域
eureka.client.region=beijing
# 配置不同的機(jī)房
eureka.client.availability-zones.beijing=zone-1,zone-2
eureka.client.service-url.zone-1=http://localhost:8761/eureka
eureka.client.service-url.zone-2=http://localhost:8762/eureka

然后我們來處理goods-service項(xiàng)目,因?yàn)槲覀冎耙约白隽艘粋€(gè)簡(jiǎn)易的集群,所以我們這里將配置文件復(fù)制出來,每個(gè)節(jié)點(diǎn)使用不同的配置文件。

在這里插入圖片描述

每個(gè)配置文件中最后都需要指定該節(jié)點(diǎn)是屬于那個(gè)區(qū)域的。

# 應(yīng)用服務(wù) WEB 訪問端口
server.port=9090

# 注冊(cè)中心地址
#eureka.client.service-url.defaultZone=http://localhost:8761/eureka,http://localhost:8762/eureka

eureka.client.region=beijing
eureka.client.availability-zones.beijing=zone-1,zone-2

eureka.client.service-url.zone-1=http://localhost:8761/eureka
eureka.client.service-url.zone-2=http://localhost:8762/eureka

# 所屬區(qū)域
eureka.instance.metadata-map.zone=zone-1

我們的另一個(gè)節(jié)點(diǎn)需要指定配置文件。

在這里插入圖片描述

goods-service處理完成后,我們?cè)趐rotal項(xiàng)目中進(jìn)行相同的配置,但是需要額外添加配置讓服務(wù)默認(rèn)調(diào)用同區(qū)域的服務(wù)。

eureka.client.region=beijing
eureka.client.availability-zones.beijing=zone-1,zone-2

eureka.client.service-url.zone-1=http://localhost:8761/eureka
eureka.client.service-url.zone-2=http://localhost:8762/eureka

eureka.instance.metadata-map.zone=zone-1
# 默認(rèn)調(diào)用同區(qū)域的服務(wù)
eureka.client.prefer-same-zone-eureka=true

這個(gè)時(shí)候我們將所有服務(wù)啟動(dòng),查看相應(yīng)效果。

可以看到所有的請(qǐng)求默認(rèn)都是到9090節(jié)點(diǎn)上的,這個(gè)時(shí)候我們將9090節(jié)點(diǎn)停止。

在這里插入圖片描述

停止后,我們?cè)俅卧L問可能會(huì)請(qǐng)求失敗,可以稍等會(huì)請(qǐng)求,這是由于停止后,9090節(jié)點(diǎn)的服務(wù)并沒有立刻從eureka下線,屬于自我保護(hù)機(jī)制的問題。

在這里插入圖片描述

以上便是使用eureka進(jìn)行多區(qū)域配置的一個(gè)簡(jiǎn)單演示。

Eureka自我保護(hù)機(jī)制

官方對(duì)于自我保護(hù)機(jī)制的定義:

自我保護(hù)模式正是一種針對(duì)網(wǎng)絡(luò)異常波動(dòng)的安全保護(hù)措施,使用自我保護(hù)模式能使Eureka集群更加的健壯、穩(wěn)定的運(yùn)行。

自我保護(hù)機(jī)制的工作機(jī)制是:如果在15分鐘內(nèi)超過85%的客戶端節(jié)點(diǎn)都沒有正常的心跳,那么Eureka就認(rèn)為客戶端與注冊(cè)中心出現(xiàn)了網(wǎng)絡(luò)故障,Eureka Server自動(dòng)進(jìn)入自我保護(hù)機(jī)制,此時(shí)會(huì)出現(xiàn)以下幾種情況:

  • Eureka Server不再?gòu)淖?cè)列表中移除因?yàn)殚L(zhǎng)時(shí)間沒收到心跳而應(yīng)該過期的服務(wù)。
  • Eureka Server仍然能夠接受新服務(wù)的注冊(cè)和查詢請(qǐng)求,但是不會(huì)被同步到其它節(jié)點(diǎn)上,保證當(dāng)前節(jié)點(diǎn)依然可用。
  • 當(dāng)網(wǎng)絡(luò)穩(wěn)定時(shí),當(dāng)前Eureka Server新的注冊(cè)信息會(huì)被同步到其它節(jié)點(diǎn)中。

因此Eureka Server可以很好的應(yīng)對(duì)因網(wǎng)絡(luò)故障導(dǎo)致部分節(jié)點(diǎn)失聯(lián)的情況,而不會(huì)像ZK那樣如果有一半不可用的情況會(huì)導(dǎo)致整個(gè)集群不可用而變成癱瘓。

我們可以通過如下參數(shù)配置比例:

eureka.server.renewal-percent-threshold=0.85

我們?cè)趺创_定是誰的85%沒有心跳則會(huì)觸發(fā)呢,是圖中所示的預(yù)期renew值,如果低于10*0.85的客戶端沒有續(xù)約,則進(jìn)入自我保護(hù)機(jī)制。

在這里插入圖片描述

Renews threshold = 服務(wù)總數(shù) * 每分鐘的續(xù)約數(shù)量 (60s/客戶端續(xù)約(心跳)間隔時(shí)間) * renewal-percent-threshold

自我保護(hù)開關(guān)

Eureka自我保護(hù)機(jī)制,通過配置 eureka.server.enable-self-preservationtrue打開/false禁用自我保護(hù)機(jī)制,默認(rèn)打開狀態(tài),建議生產(chǎn)環(huán)境打開此配置。

心跳機(jī)制

上文的續(xù)約說到底就是我們的心跳機(jī)制,整體流程可以參考下圖。

在這里插入圖片描述

Eureka實(shí)例信息存儲(chǔ)

上文說過我們是通過鍵值對(duì)來存儲(chǔ)服務(wù)信息的,整體結(jié)構(gòu)大致如下圖所示:

在這里插入圖片描述

項(xiàng)目地址

cloud項(xiàng)目地址

到此這篇關(guān)于Spring Cloud Eureka服務(wù)注冊(cè)中心入門的文章就介紹到這了,更多相關(guān)Spring Cloud Eureka服務(wù)注冊(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)用Freemarker完美導(dǎo)出word文檔(帶圖片)

    Java實(shí)現(xiàn)用Freemarker完美導(dǎo)出word文檔(帶圖片)

    這篇文章主要介紹了Java實(shí)現(xiàn)用Freemarker完美導(dǎo)出word文檔(帶圖片),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • SpringBoot中使用Redis?Stream實(shí)現(xiàn)消息監(jiān)聽示例

    SpringBoot中使用Redis?Stream實(shí)現(xiàn)消息監(jiān)聽示例

    本文主要介紹了SpringBoot中使用Redis?Stream實(shí)現(xiàn)消息監(jiān)聽示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • SpringBoot中事務(wù)失效的原因詳解

    SpringBoot中事務(wù)失效的原因詳解

    這篇文章主要介紹了SpringBoot中事務(wù)失效的原因詳解,spring中的事務(wù)是依賴AOP的,AOP是通過動(dòng)態(tài)代理實(shí)現(xiàn)的,只有通過代理類訪問的方法才能被攔截,需要的朋友可以參考下
    2023-10-10
  • java實(shí)現(xiàn)拼圖小游戲

    java實(shí)現(xiàn)拼圖小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Java實(shí)現(xiàn)簡(jiǎn)易五子棋小游戲

    Java實(shí)現(xiàn)簡(jiǎn)易五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • SpringBoot停止啟動(dòng)時(shí)測(cè)試檢查rabbitmq操作

    SpringBoot停止啟動(dòng)時(shí)測(cè)試檢查rabbitmq操作

    這篇文章主要介紹了SpringBoot停止啟動(dòng)時(shí)測(cè)試檢查rabbitmq操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • idea項(xiàng)目全局去掉嚴(yán)格的語法校驗(yàn)方式

    idea項(xiàng)目全局去掉嚴(yán)格的語法校驗(yàn)方式

    這篇文章主要介紹了idea項(xiàng)目全局去掉嚴(yán)格的語法校驗(yàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2023-04-04
  • Java簡(jiǎn)易計(jì)算器程序設(shè)計(jì)

    Java簡(jiǎn)易計(jì)算器程序設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了Java簡(jiǎn)易計(jì)算器程序設(shè)計(jì)的相關(guān)參考資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-10-10
  • Spring Boot使用Servlet及Filter過程詳解

    Spring Boot使用Servlet及Filter過程詳解

    這篇文章主要介紹了Spring Boot使用Servlet及Filter過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • JPA?使用criteria簡(jiǎn)單查詢工具類方式

    JPA?使用criteria簡(jiǎn)單查詢工具類方式

    這篇文章主要介紹了JPA?使用criteria簡(jiǎn)單查詢工具類方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評(píng)論