參考:
如何刪除Eureka服務中心已經注冊的服務
eureka注冊中心刪除服務與狀態變更
Eureka中已注冊的服務下線三種方式
-
刪除Eureka注冊中心的服務
起因:Eureka的自我保護機制
默認情況下,如果 Eureka Server 在一定的 90s 內沒有接收到某個微服務實例的心跳,會注銷該實例。但是在微服務架構下服務之間通常都是跨進程調用,網絡通信往往會面臨着各種問題,比如微服務狀態正常,網絡分區故障,導致此實例被注銷。
固定時間內大量實例被注銷,可能會嚴重威脅整個微服務架構的可用性。為了解決這個問題,Eureka 開發了自我保護機制,那么什么是自我保護機制呢?
Eureka Server 在運行期間會去統計心跳失敗比例在 15 分鍾之內是否低於 85%,如果低於 85%,Eureka Server 即會進入自我保護機制。
Eureka Server 進入自我保護機制,會出現以下幾種情況:
(1) Eureka 不再從注冊列表中移除因為長時間沒收到心跳而應該過期的服務
(2) Eureka 仍然能夠接受新服務的注冊和查詢請求,但是不會被同步到其它節點上(即保證當前節點依然可用)
(3) 當網絡穩定時,當前實例新的注冊信息會被同步到其它節點中Eureka 自我保護機制是為了防止誤殺服務而提供的一個機制。當個別客戶端出現心跳失聯時,則認為是客戶端的問題,剔除掉客戶端;當 Eureka 捕獲到大量的心跳失敗時,則認為可能是網絡問題,進入自我保護機制;當客戶端心跳恢復時,Eureka 會自動退出自我保護機制。
如果在保護期內剛好這個服務提供者非正常下線了,此時服務消費者就會拿到一個無效的服務實例,即會調用失敗。對於這個問題需要服務消費者端要有一些容錯機制,如重試,斷路器等。(關於自我保護部分配置我上面的配置文件已經說明)
操作:在pm中操作:
(DELETE)http://${server}:${port}/eureka/apps/${serviceName}/${instanceId}