Ribbon的重試機制是基於Spring Retry,須要引用相關包:html
<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency>
在添加了包引用後,重試機制自動生效,相關配置以下:git
ribbon:
retryableStatusCodes: 404,502
OkToRetryOnAllOperations: false
MaxAutoRetries: 0
MaxAutoRetriesNextServer: 1
參數詳細解:github
默認狀況下,Ribbon不會針對HTTP非正常響應狀態值(如40四、502等)進行重試。若是您須要對特殊的Http狀態進行重試,須要配置該參數。spring
這個參數指的是是否容許全部的HTTP請求(GET,POST,PUT等)重試。默認值是false,只容許GET請求重試。對於POST等請求,請慎重使用。spa
這個參數用於配置當前實例最大重試次數,默認值爲0。重試次數不包括第一次請求。code
這個參數指的是切換實例最大重試次數,默認值1。htm
若是訪問當前實例異常,會再次嘗試訪問當前實例(次數由MaxAutoRetries決定);若是還不行,就會訪問下一個實例;若是仍然不行,會把下一個實例做爲當前實例並重試(次數由MaxAutoRetries決定)...依此類推,直到切換實例次數達到上限(由MaxAutoRetriesNextServer決定)。總共的重試次數計算公式:blog
1+MaxAutoRetries*(MaxAutoRetriesNextServer+1)+MaxAutoRetriesNextServer
新版Feign中無縫集成了Ribbon(不管您是否真的須要Ribbon😂),因此Ribbon的重試配置在Feign中仍然有效。雖然Feign自己具有重試功能,但不建議使用,由於會和Ribbon的重試一塊兒使用會形成混亂。路由
由於Zuul也使用了Ribbon,因此只需配置Ribbon便可:get
zuul:
#全局配置是否啓用重試
retryable: true
routes:
sample:
#按路由配置
retryable: false
#重試配置
ribbon:
OkToRetryOnAllOperations: false
MaxAutoRetries: 0
MaxAutoRetriesNextServer: 1
上述配置中,首先經過zuul.retryable全局啓用重試,固然也能針對路由配置(配置中禁用了sample路由的重試)。而後配置Ribbon的重試策略。
P.S. 別忘了引用spring-retry包。