一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語(yǔ)言|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 一文帶你掌握SpringCloud高可用服務(wù)注冊(cè)中心Eureka

一文帶你掌握SpringCloud高可用服務(wù)注冊(cè)中心Eureka

2021-04-29 01:23動(dòng)力節(jié)點(diǎn) Java教程

Eureka是Netflix的子模塊之一,也是一個(gè)核心的模塊,Eureka 采用了 C-S(客戶端/服務(wù)端)的設(shè)計(jì)架構(gòu),也就是 Eureka 由兩個(gè)組件組成:Eureka 服務(wù)端和 Eureka 客戶端。

一文帶你掌握SpringCloud高可用服務(wù)注冊(cè)中心Eureka

 什么是服務(wù)注冊(cè)?

服務(wù)注冊(cè):將服務(wù)所在主機(jī)、端口、版本號(hào)、通信協(xié)議等信息登記到注冊(cè)中心上;

什么是服務(wù)發(fā)現(xiàn)?

服務(wù)發(fā)現(xiàn):服務(wù)消費(fèi)者向注冊(cè)中心請(qǐng)求已經(jīng)登記的服務(wù)列表,然后得到某個(gè)服務(wù)的主機(jī)、端口、版本號(hào)、通信協(xié)議等信息,從而實(shí)現(xiàn)對(duì)具體服務(wù)的調(diào)用;

Eureka是什么?

Eureka是Netflix的子模塊之一,也是一個(gè)核心的模塊,Eureka 采用了 C-S(客戶端/服務(wù)端)的設(shè)計(jì)架構(gòu),也就是 Eureka 由兩個(gè)組件組成:Eureka 服務(wù)端和 Eureka 客戶端。

Eureka Server(一個(gè)獨(dú)立的項(xiàng)目) 用于注冊(cè)服務(wù)以及實(shí)現(xiàn)服務(wù)的負(fù)載平衡和故障轉(zhuǎn)移,它是服務(wù)的注冊(cè)中心,Eureka Client(我們的微服務(wù)) 它是用于與Eureka Server交互,獲取其上注冊(cè)的服務(wù),使得交互變得非常簡(jiǎn)單,只需要通過(guò)服務(wù)標(biāo)識(shí)符即可拿到服務(wù)。

與spring-cloud的關(guān)系:

Eureka 是 Netflix 公司開(kāi)發(fā)的(一家做版權(quán)視頻和云服務(wù)的公司),Spring Cloud 封裝了 Netflix 公司開(kāi)發(fā)的Eureka 模塊來(lái)實(shí)現(xiàn)服務(wù)注冊(cè)和發(fā)現(xiàn),也就是說(shuō) Spring Cloud 對(duì) Netflix Eureka 做了二次封裝;

角色關(guān)系圖:

一文帶你掌握SpringCloud高可用服務(wù)注冊(cè)中心Eureka

搭建與配置 Eureka 服務(wù)注冊(cè)中心

 

Spring Cloud 要使用 Eureka 注冊(cè)中心非常簡(jiǎn)單和方便,Spring Cloud 中的Eureka 服務(wù)注冊(cè)中心實(shí)際上也是一個(gè) Spring Boot 工程,我們只需通過(guò)引入相關(guān)依賴和注解配置就能讓 Spring Boot 構(gòu)建的微服務(wù)應(yīng)用輕松地與 Eureka 進(jìn)行整合。

具體步驟如下:

1、創(chuàng)建一個(gè) SpringBoot 項(xiàng)目,并且添加 SpringBoot 的相關(guān)依賴;

  1. 34-sprinGCloud-service-eureka 

2、添加 eureka 的依賴:

  1. <!--Spring Cloud 的 eureka-server 起步依賴--> 
  2.  
  3. <dependency> 
  4.  
  5. <groupId>org.springframework.cloud</groupId> 
  6.  
  7. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> 
  8.  
  9. </dependency> 

3、在 Spring Boot 的入口類上添加一個(gè)@EnableEurekaServer 注解,用于開(kāi)啟 Eureka 注冊(cè)中心服務(wù)端

4、在 application.properties 文件中配置 Eureka 服務(wù)注冊(cè)中心信息:

#內(nèi)嵌定時(shí)tomcat的端口

server.port=8761

#設(shè)置該服務(wù)注冊(cè)中心的hostname

eureka.instance.hostname=localhost

#由于我們目前創(chuàng)建的應(yīng)用是一個(gè)服務(wù)注冊(cè)中心,而不是普通的應(yīng)用,默認(rèn)情況下,這個(gè)應(yīng)用會(huì)向注冊(cè)中心(也是它自己)注冊(cè)它自己,設(shè)置為false表示禁止這種自己向自己注冊(cè)的默認(rèn)行為

eureka.client.register-with-eureka=false

#表示不去從服務(wù)端檢索其他服務(wù)信息,因?yàn)樽约壕褪欠?wù)端,服務(wù)注冊(cè)中心本身的職責(zé)就是維護(hù)服務(wù)實(shí)例,它不需要去檢索其他服務(wù)

eureka.client.fetch-registry=false

#指定服務(wù)注冊(cè)中心的位置

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

啟動(dòng)與測(cè)試 Eureka 服務(wù)注冊(cè)中心

1、完成上面的項(xiàng)目搭建后,我們就可以啟動(dòng) SpringBoot 程序,main 方法運(yùn)行;

2、啟動(dòng)成功之后,通過(guò)在瀏覽器地址欄訪問(wèn)我們的注冊(cè)中心;

向 Eureka 服務(wù)注冊(cè)中心注冊(cè)服務(wù)

我們前面搭建了服務(wù)提供者項(xiàng)目,接下來(lái)我們就可以將該服務(wù)提供者注冊(cè)到

Eureke 注冊(cè)中心,步驟如下:

1、在該服務(wù)提供者中添加 eureka 的依賴,因?yàn)榉?wù)提供者向注冊(cè)中心注冊(cè)服務(wù),需要連接 eureka,所以需要 eureka 客戶端的支持;

  1. <!--spring-cloud-starter-netflix-eureka-client--> 
  2.  
  3. <dependency> 
  4.  
  5. <groupId>org.springframework.cloud</groupId> 
  6.  
  7. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> 
  8.  
  9. </dependency> 

2、激活 Eureka 中的 EnableEurekaClient 功能:

在 Spring Boot 的入口函數(shù)處,通過(guò)添加@EnableEurekaClient 注解來(lái)表明自己是一個(gè)eureka 客戶端,讓我的服務(wù)提供者可以連接 eureka 注冊(cè)中心;

3、配置服務(wù)名稱和注冊(cè)中心地址

#每間隔2s,向服務(wù)端發(fā)送一次心跳,證明自己依然"存活"

eureka.instance.lease-renewal-interval-in-seconds=2

#告訴服務(wù)端,如果我10s之內(nèi)沒(méi)有給你發(fā)心跳,就代表我故障了,將我踢出掉

eureka.instance.lease-expiration-duration-in-seconds=10

#告訴服務(wù)端,服務(wù)實(shí)例以IP作為鏈接,而不是取機(jī)器名

eureka.instance.prefer-ip-address=true

#告訴服務(wù)端,服務(wù)實(shí)例的名字

eureka.instance.instance-id=34-sprinGCloud-service-goods

#eureka注冊(cè)中心的連接地址

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

4、啟動(dòng)服務(wù)提供者 SpringBoot 程序的 main 方法運(yùn)行;

5、啟動(dòng)運(yùn)行之后,通過(guò)在瀏覽器地址欄訪問(wèn)我們之前搭建好的 eureka 注冊(cè)中心,就可以看到有一個(gè)服務(wù)已經(jīng)注冊(cè)成功了;

從 Eureka 服務(wù)注冊(cè)中心發(fā)現(xiàn)與消費(fèi)服務(wù)

我們已經(jīng)搭建一個(gè)服務(wù)注冊(cè)中心,同時(shí)也向這個(gè)服務(wù)注冊(cè)中心注冊(cè)了服務(wù),接下來(lái)我們就可以發(fā)現(xiàn)和消費(fèi)服務(wù)了,這其中服務(wù)的發(fā)現(xiàn)由 eureka 客戶端實(shí)現(xiàn),而服務(wù)的消費(fèi)由 Ribbon實(shí)現(xiàn),也就是說(shuō)服務(wù)的調(diào)用需要 eureka 客戶端和 Ribbon,兩者配合起來(lái)才能實(shí)現(xiàn);

Eureka 客戶端是一個(gè) Java 客戶端,用來(lái)連接 Eureka 服務(wù)端,與服務(wù)端進(jìn)行交互、負(fù)載均衡,服務(wù)的故障切換等;

Ribbon 是一個(gè)基于 HTTP 和 TCP 的客戶端負(fù)載均衡器,當(dāng)使用 Ribbon 對(duì)服務(wù)進(jìn)行訪問(wèn)的時(shí)候,它會(huì)擴(kuò)展 Eureka 客戶端的服務(wù)發(fā)現(xiàn)功能,實(shí)現(xiàn)從Eureka注冊(cè)中心中獲取服務(wù)端列表,并通過(guò) Eureka 客戶端來(lái)確定服務(wù)端是否己經(jīng)啟動(dòng)。

Ribbon 在 Eureka 客戶端服務(wù)發(fā)現(xiàn)的基礎(chǔ)上,實(shí)現(xiàn)了對(duì)服務(wù)實(shí)例的選擇策略,從而實(shí)現(xiàn)對(duì)服務(wù)的負(fù)載均衡消費(fèi)。

接下來(lái)我們來(lái)讓服務(wù)消費(fèi)者去消費(fèi)服務(wù):

我們前面搭建了服務(wù)消費(fèi)者項(xiàng)目,接下來(lái)我們就可以使用該服務(wù)消費(fèi)者通過(guò)注冊(cè)中心去調(diào)用服務(wù)提供者,步驟如下:

1、在該消費(fèi)者項(xiàng)目中添加 eureka 的依賴,因?yàn)榉?wù)消費(fèi)者從注冊(cè)中心獲取服務(wù),需要連接 eureka,所以需要 eureka 客戶端的支持;

  1. <!--spring-cloud-starter-netflix-eureka-client--> 
  2.  
  3. <dependency> 
  4.  
  5. <groupId>org.springframework.cloud</groupId> 
  6.  
  7. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> 
  8.  
  9. </dependency> 

2、激活 Eureka 中的 EnableEurekaClient 功能:

在 Spring Boot 的入口函數(shù)處,通過(guò)添加@EnableEurekaClient 注解來(lái)表明自己是一個(gè)eureka 客戶端,讓我的服務(wù)消費(fèi)者可以使用 eureka 注冊(cè)中心;

3、配置服務(wù)的名稱和注冊(cè)中心的地址:

  1. spring.application.name=34-sprinGCloud-service-portal 
  2.  
  3. eureka.client.service-url.defaultZone=http://localhost:8761/eureka 

4、前面我介紹了服務(wù)的發(fā)現(xiàn)由 eureka 客戶端實(shí)現(xiàn),而服務(wù)的真正調(diào)用由 ribbon實(shí)現(xiàn),所以我們需要在調(diào)用服務(wù)提供者時(shí)使用 ribbon 來(lái)調(diào)用:

  1. @LoadBalanced//使用Ribbon實(shí)現(xiàn)負(fù)載均衡的調(diào)用 
  2.  
  3. @Bean 
  4.  
  5. public RestTemplate restTemplate() { 
  6.  
  7. return new RestTemplate(); 
  8.  

加入了 ribbon 的支持,那么在調(diào)用時(shí),即可改為使用服務(wù)名稱來(lái)訪問(wèn):

  1. restTemplate.getForEntity("http://34-SPRINGCLOUD-SERVICE-GOODS/service/goods"
  2.  
  3. String.class).getBody(); 

5、完成上面的步驟后,我們就可以啟動(dòng)消費(fèi)者的 SpringBoot 程序,main 方法運(yùn)行;

6、啟動(dòng)成功之后,通過(guò)在瀏覽器地址欄訪問(wèn)我們的消費(fèi)者,看是否可以正常調(diào)用遠(yuǎn)程服務(wù)提供者提供的服務(wù);

Eureka 與 Zookeeper 的比較

 

著名的 CAP 理論指出,一個(gè)分布式系統(tǒng)不可能同時(shí)滿足 C(一致性)、A(可用性) 和 P(分區(qū)容錯(cuò)性);

由于分區(qū)容錯(cuò)性在是分布式系統(tǒng)中必須要保證的,因此我們只能在 A 和 C 之間進(jìn)行權(quán)衡,在此 Zookeeper 保證的是 CP, 而 Eureka 則是 AP。

p 全稱:Partition tolerance (分區(qū)容忍)

主要是指網(wǎng)絡(luò)問(wèn)題, 比如:A 、B、C 三臺(tái)機(jī)器之間相互ping不通、網(wǎng)絡(luò)不通,這種情況在分布式系統(tǒng)里面是允許的,也是很有可能發(fā)生的,我們要容忍這種情況的出現(xiàn),在這種情況出現(xiàn)的時(shí)候,我們 是選擇 “一致性的C” 還是選擇 “可用性的A”,就看應(yīng)用場(chǎng)景。

Zookeeper 保證 CP

在 ZooKeeper 中,當(dāng) master 節(jié)點(diǎn)因?yàn)榫W(wǎng)絡(luò)故障與其他節(jié)點(diǎn)失去聯(lián)系時(shí),剩余節(jié)點(diǎn)會(huì)重新進(jìn)行 leader 選舉,但是問(wèn)題在于,選舉 leader 需要一定時(shí)間, 且選舉期間整個(gè) ZooKeeper 集群都是不可用的,這就導(dǎo)致在選舉期間注冊(cè)服務(wù)癱瘓。在云部署的環(huán)境下,因網(wǎng)絡(luò)問(wèn)題使得 ZooKeeper 集群失去 master 節(jié)點(diǎn)是大概率事件,雖然服務(wù)最終能夠恢復(fù),但是在選舉時(shí)間內(nèi)導(dǎo)致服務(wù)注冊(cè)長(zhǎng)期不可用是難以容忍的。

Eureka 保證 AP

Eureka 優(yōu)先保證可用性,Eureka 各個(gè)節(jié)點(diǎn)是平等的,某幾個(gè)節(jié)點(diǎn)掛掉不會(huì)影響正常節(jié)點(diǎn)的工作,剩余的節(jié)點(diǎn)依然可以提供注冊(cè)和查詢服務(wù)。而 Eureka 的客戶端在向某個(gè) Eureka 注冊(cè)或時(shí)如果發(fā)現(xiàn)連接失敗,則會(huì)自動(dòng)切換至其它節(jié)點(diǎn),只要有一臺(tái) Eureka 還在,就能保證注冊(cè)服務(wù)可用(保證可用性),只不過(guò)查到的信息可能不是最新的(不保證強(qiáng)一致性)。

所以 Eureka 在網(wǎng)絡(luò)故障導(dǎo)致部分節(jié)點(diǎn)失去聯(lián)系的情況下,只要有一個(gè)節(jié)點(diǎn)可用, 那么注冊(cè)和查詢服務(wù)就可以正常使用,而不會(huì)像 zookeeper 那樣使整個(gè)注冊(cè)服務(wù)癱瘓,Eureka 優(yōu)先保證了可用性;

Eureka 注冊(cè)中心高可用集群

 

在微服務(wù)架構(gòu)的這種分布式系統(tǒng)中,我們要充分考慮各個(gè)微服務(wù)組件的高可用性問(wèn)題,不能有單點(diǎn)故障,由于注冊(cè)中心 eureka 本身也是一個(gè)服務(wù),如果它只有一個(gè)節(jié)點(diǎn),那么它有可能發(fā)生故障,這樣我們就不能注冊(cè)與查詢服務(wù)了,所以我們需要一個(gè)高可用的服務(wù)注冊(cè)中心,這就需要通過(guò)注冊(cè)中心集群來(lái)解決。

eureka 服務(wù)注冊(cè)中心它本身也是一個(gè)服務(wù),它也可以看做是一個(gè)提供者,又可以看做是一個(gè)消費(fèi)者,我們之前通過(guò)配置:

eureka.client.register-with-eureka=false 讓注冊(cè)中心不注冊(cè)自己,但是我們可以向其他注冊(cè)中心注冊(cè)自己;

Eureka Server 的高可用實(shí)際上就是將自己作為服務(wù)向其他服務(wù)注冊(cè)中心注冊(cè)自己,這樣就會(huì)形成一組互相注冊(cè)的服務(wù)注冊(cè)中心,進(jìn)而實(shí)現(xiàn)服務(wù)清單的互相同步,往注冊(cè)中心 A 上注冊(cè)的服務(wù),可以被復(fù)制同步到注冊(cè)中心 B 上,所以從任何一臺(tái)注冊(cè)中心上都能查詢到已經(jīng)注冊(cè)的服務(wù),從而達(dá)到高可用的效果。

一文帶你掌握SpringCloud高可用服務(wù)注冊(cè)中心Eureka

一文帶你掌握SpringCloud高可用服務(wù)注冊(cè)中心Eureka

Eureka 注冊(cè)中心高可用集群搭建

 

我們知道,Eureka 注冊(cè)中心高可用集群就是各個(gè)注冊(cè)中心相互注冊(cè),所以:

在 8761 的配置文件中,讓它的 service-url 指向 8762和8763,在 8762 的配置文件中讓它的 service-url 指向 8761和8763, 在 8763 的配置文件中讓它的 service-url 指向 8761和8762;

由于兩兩互相指向?qū)Ψ剑瑢?shí)際上我們構(gòu)建了一個(gè)三節(jié)點(diǎn)的服務(wù)注冊(cè)中心集群

  1. eureka.client.service-url.defaultZone=http://eureka8762:8762/eureka/,http://eureka8763:8763/eureka/ 
  2.  
  3. eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka/,http://eureka8763:8763/eureka/ 
  4.  
  5. eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka/,http://eureka8762:8762/eureka/ 

然后在本地 hosts 文件配置:C:\Windows\System32\drivers\etc\hosts

  1. 127.0.0.1 eureka8761 
  2.  
  3. 127.0.0.1 eureka8762 
  4.  
  5. 127.0.0.1 eureka8763 

運(yùn)行時(shí),在運(yùn)行配置項(xiàng)目 Program Arguments 中配置:

  1. --spring.profiles.active=eureka8761 
  2.  
  3. --spring.profiles.active=eureka8762 
  4.  
  5. --spring.profiles.active=eureka8763 

分別啟動(dòng)三個(gè)注冊(cè)中心,訪問(wèn)三個(gè)注冊(cè)中心頁(yè)面,觀察注冊(cè)中心頁(yè)面是否正常;

Eureka 注冊(cè)中心高可用集群測(cè)試

在要進(jìn)行注冊(cè)的服務(wù)中配置:

#eureka注冊(cè)中心的連接地址

  1. eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka,http://eureka8762:8762/eureka,http://eureka8763:8763/eureka 

啟動(dòng)服務(wù)提供者服務(wù),然后觀察注冊(cè)中心頁(yè)面,可以看到服務(wù)會(huì)在三個(gè)注冊(cè)中心上都注冊(cè)成功;

集群的注冊(cè)中心打包發(fā)布

在真實(shí)項(xiàng)目中,需要將Eureka發(fā)布到具體服務(wù)器上進(jìn)行執(zhí)行,打包部署其實(shí)和springboot里面的一樣,對(duì)于properties文件,不同的環(huán)境會(huì)有不同的配置文件;

運(yùn)行:

  1. java -jar sprinGCloud-eureka-server.jar --spring.profiles.active=eureka8762; 
  2.  
  3. java -jar sprinGCloud-eureka-server.jar --spring.profiles.active=eureka8762; 
  4.  
  5. java -jar sprinGCloud-eureka-server.jar --spring.profiles.active=eureka8763 

可以寫(xiě)個(gè)shell腳本實(shí)現(xiàn)三個(gè)注冊(cè)中心的啟動(dòng):

  1. #!/bin/sh 
  2.  
  3. nohup java -jar 34-sprinGCloud-service-eureka-1.0.0.jar --spring.profiles.active=eureka8761 > ./logs/eureka8761.log & 
  4.  
  5. nohup java -jar 34-sprinGCloud-service-eureka-1.0.0.jar --spring.profiles.active=eureka8762 > ./logs/eureka8762.log & 
  6.  
  7. nohup java -jar 34-sprinGCloud-service-eureka-1.0.0.jar --spring.profiles.active=eureka8763 > ./logs/eureka8763.log & 

修改linux的hosts文件:

  1. vim /etc/hosts 
  2.  
  3. 192.168.10.128 eureka8761 
  4.  
  5. 192.168.10.128 eureka8762 
  6.  
  7. 192.168.10.128 eureka8763 

 Eureka服務(wù)注冊(cè)中心自我保護(hù)機(jī)制

 

自我保護(hù)機(jī)制是 Eureka 注冊(cè)中心的重要特性,當(dāng) Eureka 注冊(cè)中心進(jìn)入自我保護(hù)模式時(shí),在 Eureka Server 首頁(yè)會(huì)輸出如下警告信息:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT.

RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED

JUST TO BE SAFE.

小寫(xiě)是:

emergency! eureka may be incorrectly claiming instances are up when they're not. renewals are

lesser than threshold and hence the instances are not being expired just to be safe.

在沒(méi)有 Eureka 自我保護(hù)的情況下,如果 Eureka Server 在一定時(shí)間內(nèi)沒(méi)有接收到某個(gè)微服務(wù)實(shí)例的心跳,Eureka Server 將會(huì)注銷該實(shí)例,但是當(dāng)發(fā)生網(wǎng)絡(luò)分區(qū)故障時(shí),那么微服務(wù)與 Eureka Server 之間將無(wú)法正常通信,以上行為可能變得非常危險(xiǎn)了,因?yàn)槲⒎?wù)本身其實(shí)是正常的,此時(shí)不應(yīng)該注銷這個(gè)微服務(wù),如果沒(méi)有自我保護(hù)機(jī)制,那么 Eureka Server 就會(huì)將此服務(wù)注銷掉。

Eureka 通過(guò)“自我保護(hù)模式”來(lái)解決這個(gè)問(wèn)題——當(dāng) Eureka Server 節(jié)點(diǎn)在短時(shí)間內(nèi)丟失過(guò)多客戶端時(shí)(可能發(fā)生了網(wǎng)絡(luò)分區(qū)故障),那么就會(huì)把這個(gè)微服務(wù)節(jié)點(diǎn)進(jìn)行保護(hù)。一旦進(jìn)入自我保護(hù)模式,Eureka Server 就會(huì)保護(hù)服務(wù)注冊(cè)表中的信息,不刪除服務(wù)注冊(cè)表中的數(shù)據(jù)(也就是不會(huì)注銷任何微服務(wù))。當(dāng)網(wǎng)絡(luò)故障恢復(fù)后,該 Eureka Server 節(jié)點(diǎn)會(huì)再自動(dòng)退出自我保護(hù)模式。

所以,自我保護(hù)模式是一種應(yīng)對(duì)網(wǎng)絡(luò)異常的安全保護(hù)措施,它的架構(gòu)哲學(xué)是寧可同時(shí)保留所有微服務(wù)(健康的微服務(wù)和不健康的微服務(wù)都會(huì)保留),也不盲目注銷任何健康的微服務(wù),使用自我保護(hù)模式,可以讓 Eureka 集群更加的健壯、穩(wěn)定。

當(dāng)然也可以使用配置項(xiàng):

eureka.server.enable-self-preservation = false 禁用自我保護(hù)模式。

關(guān)閉自我保護(hù)模式后會(huì)出現(xiàn)紅色:

THE SELF PRESERVATION MODE IS TURNED OFF. THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.

但是 Eureka Server 自我保護(hù)模式也會(huì)給我們帶來(lái)一些困擾,如果在保護(hù)期內(nèi)某個(gè)服務(wù)提供者剛好非正常下線了,此時(shí)服務(wù)消費(fèi)者就會(huì)拿到一個(gè)無(wú)效的服務(wù)實(shí)例,此時(shí)會(huì)調(diào)用失敗,對(duì)于這個(gè)問(wèn)題需要服務(wù)消費(fèi)者端具有一些容錯(cuò)機(jī)制,如重試,斷路器等。

Eureka 的自我保護(hù)模式是有意義的,該模式被激活后,它不會(huì)從注冊(cè)列表中剔除因長(zhǎng)時(shí)間沒(méi)收到心跳導(dǎo)致注冊(cè)過(guò)期的服務(wù),而是等待修復(fù),直到心跳恢復(fù)正常之后,它自動(dòng)退出自我保護(hù)模式。這種模式旨在避免因網(wǎng)絡(luò)分區(qū)故障導(dǎo)致服務(wù)不可用的問(wèn)題。

例如,兩個(gè)微服務(wù)客戶端實(shí)例 A 和 B 之間有調(diào)用的關(guān)系,A 是消費(fèi)者,B 是提供者,但是由于網(wǎng)絡(luò)故障,B 未能及時(shí)向 Eureka 發(fā)送心跳續(xù)約,這時(shí)候 Eureka 不能簡(jiǎn)單的將 B 從注冊(cè)表中剔除,因?yàn)槿绻蕹耍珹 就無(wú)法從 Eureka 服務(wù)器中獲取 B 注冊(cè)的服務(wù),但是這時(shí)候 B 服務(wù)是可用的;

所以,Eureka 的自我保護(hù)模式最好還是開(kāi)啟它。

關(guān)于自我保護(hù)常用幾個(gè)配置如下:

服務(wù)器端配置:

#測(cè)試時(shí)關(guān)閉自我保護(hù)機(jī)制,保證不可用服務(wù)及時(shí)踢出

eureka.server.enable-self-preservation=false

客戶配置:

#每間隔 2s,向服務(wù)端發(fā)送一次心跳,證明自己依然"存活"

eureka.instance.lease-renewal-interval-in-seconds=2

#告訴服務(wù)端,如果我 10s 之內(nèi)沒(méi)有給你發(fā)心跳,就代表我故障了,將我踢出掉

eureka.instance.lease-expiration-duration-in-seconds=10

原文地址:https://www.toutiao.com/i6955378342916801037/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 桃色导航| 国产男技师 | 农夫成人网 | 午夜福利自怕 | 日本一区二区三区久久精品 | 青青国产成人久久激情91麻豆 | jzjzjz日本在线观看 | 99在线视频精品 | 日本精品一卡二卡≡卡四卡 | 成人一区二区免费中文字幕 | 色天天综合色天天碰 | 国产福利不卡 | 扒开尿口 | 北条麻妃黑人正在播放 | 亚洲欧美日本在线观看 | 日本精品人妖shemale人妖 | 色一情一区二区三区四区 | 色哟哟在线视频 | 国产成人精品午夜在线播放 | 色综合色综合 | 我和子伦系列小说 | 日韩国产成人资源精品视频 | 国产亚洲精品综合在线网址 | 成人特级毛片69免费观看 | 国产精品午夜性视频网站 | 8天堂资源在线官网 | 日韩亚洲欧美综合一区二区三区 | 99精品国产在现线免费 | 日本一卡二卡3卡四卡无卡网址 | 国产在线欧美日韩精品一区二区 | www.好吊操| 美人的淫事[纯hh] | 国产亚洲精品久久yy5099 | 青青青国产精品国产精品美女 | 日本欧美强乱视频在线 | 日本加勒比在线播放 | a男人的天堂久久a毛片 | 欧美精品亚洲精品日韩专区va | 精品国产麻豆免费人成网站 | 97色伦图片7778久久 | 免费91麻豆精品国产自产在线观看 |