本篇內(nèi)容介紹了“Spring Cloud常見問題有哪些”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
一、Eureka常見問題
Eureka 注冊服務(wù)慢
默認(rèn)情況下,服務(wù)注冊到Eureka Server的過程較慢。在開發(fā)或測試時,常常希望能夠加速這一過程,從而提升工作效率。
該問題的原因及解決方案:
服務(wù)的注冊涉及周期性心跳,默認(rèn)30秒一次(通過客戶端配置的serviceUrl)。只有當(dāng)實(shí)例、服務(wù)端和客戶端的本地緩存
中的元數(shù)據(jù)都相同時,服務(wù)才被其他客戶端發(fā)現(xiàn)(所以可能需要3次心跳)??梢允褂脜?shù)
eureka.instance.leaseRenewalInSeconds 修改時間間隔, 從而加快客戶端連接到其他服務(wù)的過程。在生產(chǎn)環(huán)境中最好
堅持使用默認(rèn)值,因?yàn)樵诜?wù)器內(nèi)部有一些計算,它們會對續(xù)約做出假設(shè)。
綜上所述,要想解決服務(wù)注冊慢的問題,只須將 eureka.instance.leaseRenewalInSeconds 設(shè)成一個更小的值。該配置
用于設(shè)置 Eureka Client 向 Eureka Server 發(fā)送心跳的時間間隔, 默認(rèn)是30,單位是秒。在生產(chǎn)環(huán)境中,建議堅持使用
默認(rèn)值。
已停止的微服務(wù)節(jié)點(diǎn)注銷慢或不注銷
在開發(fā)環(huán)境下,常常希望 Eureka Server 能迅速有效地注銷已停止的微服務(wù)實(shí)例。然而,由于 Eureka Server 清理無效節(jié)
點(diǎn)周期長(默認(rèn)90秒),以及自我保護(hù)模式等原因,可能會遇到微服務(wù)注銷慢甚至不注銷的問題。解決方案如下:
Eureka Server 端:
配置關(guān)閉自我保護(hù),并按需配置 Eureka Server 清理無效節(jié)點(diǎn)的時間間隔。
eureka.server.enable-self-preservation # 設(shè)為false, 關(guān)閉自我保護(hù), 從而保證會注銷微服務(wù) eureka.server.eviction-interval-timer-in-ms # 清理間隔(單位毫秒,默認(rèn)是60 * 1000)
Eureka Client 端:
配置開啟健康檢查, 并按需配置續(xù)約更新時間和到期時間。
eureka.client.healthcheck.enabled # 設(shè)為true,開啟健康檢查(需要spring-boot-starter-actuator 依賴) eureka.instance.lease-renewal-interval-in-seconds # 續(xù)約更新時間間隔(默認(rèn)是30秒) eureka.instance.lease-expiration-duration-in-seconds # 續(xù)約到期時間(默認(rèn)90秒)
值得注意的是,這些配置僅建議開發(fā)或測試時使用,生產(chǎn)環(huán)境建議堅持使用默認(rèn)值。
Eureka 的 UNKNOWN 問題總結(jié)與解決
注冊信息 UNKNOWN ,是新手常會遇到的問題。但往往很多新手,并不清楚有兩種 UNKNOWN 的情況,一種是
應(yīng)用名稱 UNKNOWN,另一種是應(yīng)用狀態(tài) UNKNOWN 。
應(yīng)用名稱UNKNOWN
應(yīng)用名稱UNKNOWN 顯然不合適,首先是微服務(wù)的名稱不夠語義化,無法直觀看出這是哪個微服務(wù);更重要的是,
我們常常使用應(yīng)用名稱消費(fèi)對應(yīng)微服務(wù)的接口。
一般來說,有兩種情況會導(dǎo)致該問題的發(fā)生:
未配置spring.application.name 或者 eureka.instance.appname 屬性。如果這兩個屬性均不配置,就會導(dǎo)致應(yīng)用名稱
UNKNOWN 的問題。
某些舊版本的SpringFox 會導(dǎo)致該問題,例如 SpringFox 2.6.0 。建議使用SpringFox 2.6.1或更新版本。
微服務(wù)實(shí)例狀態(tài)UNKNOWN
微服務(wù)實(shí)例狀態(tài)UNKNOWN 同樣很麻煩。一般來講,只會請求狀態(tài)是 UP 的微服務(wù)。該問題一般由健康檢查導(dǎo)致。
eureka.client.healthcheck.enabled=true必須設(shè)置在application.yml中,而不能設(shè)置在bootstrap.yml 中,
否則一些場景下會導(dǎo)致應(yīng)用狀態(tài) UNKNOWN 的問題。
“Spring Cloud常見問題有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!