版本聲明:
SpringCloud:Greenwich.SR4
SpringBoot:2.1.9.RELEASE
Feign調用服務的默認時長是1秒鍾,也就是如果超過1秒沒連接上或者超過1秒沒響應,那么會相應的報錯。
但是在實際的業務中,我們的服務可能因為特別原因(網絡、處理壓力大等)導致相應速度超過1秒鍾,那么就會報錯,
下面我們就來處理如何手動配置Feigin的負載均衡超時等參數
全局配置
SpringCloud負載均衡底層用的就是Ribbon
#--------------Feign負載均衡配置 配置全局超時時間
ribbon:
ConnectTimeout: 5000 #請求連接的超時時間,默認時間為1秒
ReadTimeout: 5000 #請求處理的超時時間
5秒沒有響應成功就報如下錯誤(真實情況下,會比5s多一些,因為發送請求也需要時間的,模擬超時可以在請求處理的方法上用Thread.sleep()設置休眠時間超過5s)
局部配置(就是指定提供者)
#--------------Feign負載均衡配置 局部配置超時時間等
feign-product-provider: #指定配置的服務名稱
ribbon:
OkToRetryOnAllOperations: true # 對所有請求都進行重試
MaxAutoRetries: 2 # 對當前實例的重試次數
MaxAutoRetriesNextServer: 0 # 切換實例的重試次數(集群狀態下,其它對其它實例服務重試的次數)
ConnectTimeout: 3000 # 請求連接的超時時間
ReadTimeout: 3000 # 請求處理的超時時間
上述提到的服務名稱如下配置
spring:
application:
name: feign-product-provider # 隨意設置
執行的代碼
輸出結果
不是一共重試兩次嗎?這里邊就涉及到了一個公式
共重試次數 = (MaxAutoRetries+MaxAutoRetriesNextServer+(MaxAutoRetries * MaxAutoRetiresNextServer)
= 2 + 0 + (2 * 0)
= 2
在加上我們手動請求一次那就是:2 + 1 = 3次
公式很重要!