在使用spring cloud的過程中,難免會遇到一些問題。所以對spring cloud的常用問題做一些總結。
預設情況下,服務註冊到eureka server的過程較慢。在開發或測試時,常常希望能夠加速這一
過程,從而提公升工作效率。
該問題的原因及解決方案:
服務的註冊涉及週期性心跳,預設30秒一次(通過客戶端配置的serviceurl)。只有當例項、服務端和客戶端的本地快取中的元資料都相同時,服務才被其他客戶端發現(所以可能需要3次心跳)。可以使用引數 eureka.instance.leaserenewalinseconds 修改時間間隔, 從而加快客戶端連線到其他服務的過程。在生產環境中最好堅持使用預設值,因為在伺服器內部有一些計算,它們會對續約做出假設。
綜上所述,要想解決服務註冊慢的問題,只須將 eureka.instance.leaserenewalinseconds 設成乙個更小的值。該配置用於設定 eureka client 向 eureka server 傳送心跳的時間間隔, 預設是30,單位是秒。在生產環境中,建議堅持使用預設值。
在開發環境下,常常希望 eureka server 能迅速有效地登出已停止的微服務例項。然而,由於 eureka server 清理無效節點周期長(預設90秒),以及自我保護模式等原因,可能會遇到微服務登出慢甚至不登出的問題。解決方案如下:
· eureka server 端:
配置關閉自我保護,並按需配置 eureka server 清理無效節點的時間間隔。
eureka.server.enable-self-preservation
# 設為false, 關閉自我保護, 從而保證會登出微服務
eureka.server.eviction-interval-timer-in-ms
# 清理間隔(單位毫秒,預設是60 * 1000)
· eureka client 端:
配置開啟健康檢查, 並按需配置續約更新時間和到期時間。
eureka.client.healthcheck.enabled
# 設為true,開啟健康檢查(需要spring-boot-starter-actuator 依賴)
eureka.instance.lease-renewal-interval-in-seconds
# 續約更新時間間隔(預設是30秒)
eureka.instance.lease-expiration-duration-in-seconds
# 續約到期時間(預設90秒)
值得注意的是,這些配置僅建議開發或測試時使用,生產環境建議堅持使用預設值。
下面給出兩個例項
· eureka server 配置
eureka:
server:
enable-self-preservation:false
eviction-interval-timer-in-ms:4000
· eureka client 配置
eureka:
client:
healthcheck:
enabled:true
instance:
lease-expiration-duration-inseconds:30
lease-renewal-interval-in-seconds:10
修改eureka的續約頻率可能會打破 eureka 的自我保護特徵;這也意味著在生產環境中,如果想要使用 eureka 的自我保護特性,應堅持使用預設配置。
instance id用於唯一標識註冊到eureka server 上的微服務例項。在eureka server 的首頁可以直觀地看到各個微服務的instanceid 。例如,下圖中的 eureka-dev:cloud-register-user:8002 就是instance id 。
# 將 instance id 設定成ip: 埠的形式
instance-id:$:$
這樣,就可以將微服務cloud-register-user 的instance id 設為ip:埠的形式。效果圖如下:
註冊資訊 unknown ,是新手常會遇到的問題。但往往很多新手,並不清楚有兩種 unknown 的情況,一種是應用名稱 unknown,另一種是應用狀態 unknown 。
1)應用名稱unknown
應用名稱unknown 顯然不合適,首先是微服務的名稱不夠語義化,無法直**出這是哪個微服務;更重要的是,我們常常使用應用名稱消費對應微服務的介面。
一般來說,有兩種情況會導致該問題的發生:
· 某些舊版本的springfox 會導致該問題,例如 springfox 2.6.0 。建議使用springfox 2.6.1或更新版本。
2) 微服務例項狀態unknown
微服務例項狀態unknown 同樣很麻煩。一般來講,只會請求狀態是 up 的微服務。該問題一般由健康檢查導致。
拓展閱讀
1) springfox 是一款基於spring 和 swagger 的開源的api 文件框架,前身是 swagger-springmvc 【
2) swagger 是一款非常流行的api 文件框架,它可以幫助我們設計、構建、測試、restful 介面,也可生成 restful 介面文件。【
springcloud常見問題總結以(一)
1.eureka註冊服務慢 服務註冊涉及到週期性的心跳,預設30秒一次,只有當例項 伺服器端和客戶端本地快取中的元資料都相同時,服務才能被其他客戶端發現 可能需要三次心跳 可以使用引數eureka.instance.leaserenewalintervalinseconds修改eureka clie...
常見問題 朗動常見問題
常見問題一 方向盤變沉 檢查胎壓是否正常,輪胎是否過度磨損。助力幫浦不工作,前輪氣壓低。冬天的話,冷車在冬天助力油比較稠,方向會重一點。檢查轉向助力油。1 應該是是助力系統有問題或則助力潤滑油有問題。2 如果你在駕車時感覺方向盤變緊,汽車偏向一側,需要檢查輪胎,或進行車輪平衡 定位。在這些問題剛剛發...
面試常見問題 1 this的常見問題
this 的含義 this關鍵字是乙個非常重要的語法點。毫不誇張地說,不理解它的含義,大部分開發任務都無法完成。前一章已經提到,this可以用在建構函式之中,表示例項物件。除此之外,this還可以用在別的場合。但不管是什麼場合,this都有乙個共同點 它總是返回乙個物件。簡單說,this就是屬性或方...