如何剔除eureka無效和down狀態(tài)的問題
如何剔除eureka無效和down狀態(tài)

在eureka server的web界面上
我們經(jīng)??匆娪械膶?shí)例明明被我們關(guān)掉了,但是仍然展示在服務(wù)實(shí)例的列表里面,而且狀態(tài)還是UP?
這種情況是eureka的自我保護(hù)機(jī)制導(dǎo)致的。由于eureka和實(shí)例之間要進(jìn)行心跳檢測,但是當(dāng)網(wǎng)絡(luò)故障時(shí),eureka server不能準(zhǔn)確判斷這個(gè)實(shí)例時(shí)存活還是死亡,于是采取的默認(rèn)策略是認(rèn)為其任然存活。
這是eureka的AP思想(Availability-可用性,Partition-分區(qū)容錯(cuò)性)的體現(xiàn),給予實(shí)例存活的狀態(tài)。
當(dāng)然我們也可以通過如下配置,來關(guān)掉eureka的自我保護(hù)機(jī)制(僅限開發(fā)環(huán)境),這樣一旦接收不到實(shí)例心跳,就將其剔除。
eureka.server.enable-self-preservation=false
但是生產(chǎn)環(huán)境是不能使用這種配置的,否則網(wǎng)絡(luò)狀況一不穩(wěn)定,就將本來是健康的實(shí)例剔除掉,會(huì)大大降低服務(wù)的可用性。
備注:有的文章說造成這種現(xiàn)象的原因是我們的服務(wù)沒有正常關(guān)閉,IDEA中我們直接Stop服務(wù)會(huì)導(dǎo)致這種狀況,如果選擇Exit就不會(huì)出現(xiàn)這種情況。我還沒有驗(yàn)證。
對(duì)于一些已經(jīng)DOWN掉的節(jié)點(diǎn)
想直接剔除掉,不想讓他展示在界面中?
這個(gè)問題和上個(gè)問題的解決辦法是一致的,如下。
解決辦法:
使用Postman發(fā)送delete請(qǐng)求,主動(dòng)刪除無效實(shí)例。

如圖,我們構(gòu)建上述DELETE請(qǐng)求
DELETE請(qǐng)求 http://localhost:8761/eureka/apps/ABC-BOOT/192.168.1.50:abc-boot:9020 # 格式 http://注冊(cè)中心地址/eureka/apps/實(shí)例名稱/節(jié)點(diǎn)詳細(xì)信息
1.注意要使用DELETE請(qǐng)求;
2.注意JESSIONID可以從eureka界面的F12中獲取,否則會(huì)驗(yàn)證失敗。
eureka自動(dòng)剔除無效的服務(wù)
由于Eureka擁有自我保護(hù)機(jī)制,當(dāng)其注冊(cè)表里服務(wù)因?yàn)榫W(wǎng)絡(luò)或其他原因出現(xiàn)故障而關(guān)停時(shí),Eureka不會(huì)剔除服務(wù)注冊(cè),而是等待其修復(fù)。這是AP的一種實(shí)現(xiàn)。
若要剔除無效服務(wù),可以按照以下方式實(shí)現(xiàn)
在eureka注冊(cè)服務(wù)中心上配置
server端配置:
eureka: ? ? server: ? ? ? ? enable-self-preservation: false ? ? ? ? eviction-interval-timer-in-ms: 4000
enable-self-preservation: 關(guān)閉自我保護(hù)模式(缺省為打開)eviction-interval-timer-in-ms: 續(xù)期時(shí)間,即掃描失效服務(wù)的間隔時(shí)間
在eureka client節(jié)點(diǎn)上配置
client配置:
eureka: ? ? instance: ? ? ? ? lease-renewal-interval-in-seconds: 10 ? ? ? ? lease-expiration-duration-in-seconds: 30
lease-renewal-interval-in-seconds:表示eureka client發(fā)送心跳給server端的頻率lease-expiration-duration-in-seconds: 發(fā)呆時(shí)間,即服務(wù)續(xù)約到期時(shí)間
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決Maven?build打包,類找不到,找不到引用的那個(gè)項(xiàng)目里面的類問題
文章討論了在使用Maven構(gòu)建項(xiàng)目時(shí)遇到類找不到的問題,并給出了解決方法,主要原因是公共項(xiàng)目被打成了可執(zhí)行的jar,導(dǎo)致其他項(xiàng)目無法引用其中的類,解決方法包括在公共項(xiàng)目的pom中將打包類型改為普通jar,以及在主項(xiàng)目中正確引用公共項(xiàng)目2026-02-02
Java Swing JSlider滑塊的實(shí)現(xiàn)示例
這篇文章主要介紹了Java Swing JSlider滑塊的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Java使用ReentrantLock進(jìn)行加解鎖的示例代碼
在多線程編程中,為了確保多個(gè)線程在訪問共享資源時(shí)不會(huì)發(fā)生沖突,我們通常需要使用 鎖 來同步對(duì)資源的訪問,本文將深入探討如何優(yōu)雅地使用 ReentrantLock,避免常見的坑點(diǎn),并提升代碼的可維護(hù)性,需要的朋友可以參考下2025-04-04
關(guān)于@Component注解下的類無法@Autowired問題
這篇文章主要介紹了關(guān)于@Component注解下的類無法@Autowired問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
如何修改json字符串中某個(gè)key對(duì)應(yīng)的value值
這篇文章主要介紹了如何修改json字符串中某個(gè)key對(duì)應(yīng)的value值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Java中List.of()和Arrays.asList()的區(qū)別及原因分析
這篇文章主要介紹了Java中List.of()和Arrays.asList()的區(qū)別及原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09

