現在由於eureka服務越來越多,發現服務提供者在停掉很久之後,服務呼叫者很長時間並沒有感知到變化,依舊還在持續呼叫下線的服務,導致長時間後才能返回錯誤,因此需要調整eureka服務和客戶端的配置,以便實現服務下線後快速感知。
需要調整服務註冊中心、服務提供者和服務消費者三個配置。
先上要更改的配置:
eureka:1.先要關閉自我保護 enable-self-preservation: falseserver: #配置屬性,但由於 eureka 自我保護模式以及心跳周期長的原因,經常會遇到 eureka server 不剔除已關停的節點的問題
enable-self-preservation: false # 設為false,關閉自我保護
eviction-interval-timer-in-ms: 5000 # 清理間隔(單位毫秒,預設是60*1000)啟用主動失效,並且每次主動失效檢測間隔為3s
2.eviction-interval-timer-in-ms 啟用主動失效,並且每次主動失效檢測間隔為5s
eureka server會定時(間隔值是eureka.server.eviction-interval-timer-in-ms,預設值為0,預設情況不刪除例項)進行檢查,如果發現例項在在一定時間(此值由客戶端設定的eureka.instance.lease-expiration-duration-in-seconds定義,預設值為90s)內沒有收到心跳,則會登出此例項。
有些文件指出還需要設定下面的兩個引數(上下兩種寫法),但都測試後暫時沒發現什麼強關聯性,這裡暫時先不設定。
客戶端通過eureka.instance.lease-renewal-interval-in-seconds 每隔這個時間會主動心跳一次,預設值為30s,更新自己的狀態。eureka server收到心跳後,會通知集群裡的其它eureka server更新此例項的狀態。
lease-expiration-duration-in-seconds 設定服務過期時間配置,超過這個時間沒有接收到心跳eurekaserver就會將這個例項剔除,一般是lease-renewal-interval-in-seconds的3倍。
eureka server會定時(間隔值是eureka.server.eviction-interval-timer-in-ms,預設值為0,預設情況不刪除例項)進行檢查,如果發現例項在在一定時間(此值由eureka.instance.lease-expiration-duration-in-seconds定義,預設值為90s)內沒有收到心跳,則會登出此例項。
經過測試設定4s上報一次心跳,12s內無跳就讓註冊中心剔除服務比較合理,上報時間若為2s,1000個服務會造成對註冊中心請求的壓力,且2s有可能網路抖動,整個時長6s無響應就判為下線會造成併發壓力。
消費端為了能快速響應服務請求會從eureka server拉取服務位址清單後快取到本地(後面會增量獲取),fetch-registry要設定為true,定期的更新客戶端的服務清單時間 registry-fetch-interval-seconds: 8,這是消費端的設定。
EUREKA檢測服務是否下線
eureka微服務架構在生產環境部署會出現服務意外宕機的情況,根據eureka的服務註冊監聽可以實現對服務下線的監聽,通過騰信的簡訊介面傳送簡訊通知 可根據業務需要更改 服務註冊監聽 eventlistener condition event.replication false public voi...
Eureka 中服務下線的幾種方式
1 直接停掉服務 根據預設的策略,如果在一定的時間內,客戶端沒有向註冊中心傳送續約請求,那麼註冊中心就會將該例項從註冊中心移除,但是有缺陷,因為服務直接停掉後,例項仍然會在註冊中心存在一小段時間,也有可能註冊中心直接認為你的服務down掉,但是例項仍然存在於註冊中心 2 通過註冊中心介面強制下線 通...
Eureka 中服務下線的幾種方式
原文 eureka 中服務下線的幾種方式 1 直接停掉服務 根據預設的策略,如果在一定的時間內,客戶端沒有向註冊中心傳送續約請求,那麼註冊中心就會將該例項從註冊中心移除,但是有缺陷,因為服務直接停掉後,例項仍然會在註冊中心存在一小段時間,也有可能註冊中心直接認為你的服務down掉,但是例項仍然存在於...