微服務Springcloud超詳細教程+實戰(十)
本人正在找深圳Java實習工作,求大佬帶飛 QQ:1172796094
如在文件中遇到什麼問題請聯絡作者
——————————————————————————————————————
服務消費者
獲取服務列表
當服務消費者啟動時,會檢測eureka.client.fetch-registry=true
引數的值,如果為true,則會從Eureka Server註冊中心拉取服務列表,然後快取在本地。並且每隔30秒
會重新獲取並更新資料。我們可以通過下面的引數來修改:
eureka: client: registry-fetch-interval-seconds: 5
生產環境中,我們不需要修改這個值。
但是為了在開發環境下,能夠快速得到服務的最新狀態,我們可以將其設定小一點。
失效剔除和自我保護
失效剔除
有些時候,我們的服務提供方並不一定會正常下線,可能因為記憶體溢位、網路故障等原因導致服務無法正常工作。Eureka Server需要將這樣的服務剔除出服務列表。因此它會開啟一個定時任務,每隔60秒對所有失效的服務(超過90秒未響應)進行剔除。
可以通過eureka.server.eviction-interval-timer-in-ms
引數對其進行修改,單位是毫秒,生成環境不要修改。
這個會對我們開發帶來極大的不便,你對服務重啟,隔了60秒Eureka才反應過來。開發階段可以適當調整,比如 5S
自我保護
我們關停一個服務(等待30s左右),就會在Eureka面板看到一條警告:
這是觸發了Eureka的自我保護機制。當一個服務未按時進行心跳續約時,Eureka會統計最近15分鐘心跳失敗的服務例項的比例是否超過了85%。在生產環境下,因為網路延遲等原因,心跳失敗例項的比例很有可能超標,但是此時就把服務剔除列表並不妥當,因為服務可能沒有宕機。Eureka就會把當前例項的註冊資訊保護起來,不予剔除。生產環境下這很有效,保證了大多數服務依然可用。
但是這給我們的開發帶來了麻煩, 因此開發階段我們都會關閉自我保護模式:
在eureka的yml檔案中配置
eureka: server: enable-self-preservation: false # 關閉自我保護模式(預設為開啟) eviction-interval-timer-in-ms: 1000 # 掃描失效服務的間隔時間(預設為60*1000ms)
注意點
1 eureka伺服器停止之後,服務呼叫方和服務消費方會報錯,原因是啥?
答:當服務註冊到eureka之後,每隔30s需要向eureka註冊中心傳送心跳(續約renew),表示我還活著,當90s內沒有傳送心跳,表明eureka任務此服務暫時無法向外提供服務,就把它保護起來,然後在接下來的15分以內,eureka會不斷的請求這個服務,如果得到正常的響應,就把它調出來,繼續提供服務,如果15分鐘以內,eureka還是收不到響應,那就把它移除服務列表
2 當停止eureka註冊中心之後,服務消費方還可以使用服務提供方嗎?
答:可以,因為有快取
3 服務提供方/服務消費方 是何時去eureka註冊中心獲取其他服務的ip地址和埠號的?
答:結論:第一次啟動的30以內,去eureka註冊中心拉取其他服務快取到本地
4 如果 停止eureka註冊中心之後,修改服務提供方的埠,此時服務呼叫方就無法請求服務
5 在不停止eureka註冊中心的情況下,如果修改服務提供方的埠,那此時服務呼叫方會收到響應嗎?
答: 需要等待幾分鐘,可以繼續提供新埠的服務