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

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

如圖,我們構建上述DELETE請求
DELETE請求 http://localhost:8761/eureka/apps/ABC-BOOT/192.168.1.50:abc-boot:9020 # 格式 http://注冊中心地址/eureka/apps/實例名稱/節(jié)點詳細信息
1.注意要使用DELETE請求;
2.注意JESSIONID可以從eureka界面的F12中獲取,否則會驗證失敗。
eureka自動剔除無效的服務
由于Eureka擁有自我保護機制,當其注冊表里服務因為網絡或其他原因出現故障而關停時,Eureka不會剔除服務注冊,而是等待其修復。這是AP的一種實現。
若要剔除無效服務,可以按照以下方式實現
在eureka注冊服務中心上配置
server端配置:
eureka: ? ? server: ? ? ? ? enable-self-preservation: false ? ? ? ? eviction-interval-timer-in-ms: 4000
enable-self-preservation: 關閉自我保護模式(缺省為打開)eviction-interval-timer-in-ms: 續(xù)期時間,即掃描失效服務的間隔時間
在eureka client節(jié)點上配置
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ā)呆時間,即服務續(xù)約到期時間
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
解決JAVA8 Collectors.toMap value為null報錯的問題
這篇文章主要介紹了解決JAVA8 Collectors.toMap value為null報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
Java中的Unsafe在安全領域的使用總結和復現(實例詳解)
unsafe里面有很多好用的方法,比如allocateInstance可以直接創(chuàng)建實例對象,defineAnonymousClass可以創(chuàng)建一個VM匿名類(VM?Anonymous?Class),以及直接從內存級別修改對象的值。這篇文章主要介紹了Java中的Unsafe在安全領域的一些應用總結和復現,需要的朋友可以參考下2022-03-03

