Spring Cloud經常使用組件重試總結

Ribbon的重試配置

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

retryableStatusCodes

默認狀況下,Ribbon不會針對HTTP非正常響應狀態值(如40四、502等)進行重試。若是您須要對特殊的Http狀態進行重試,須要配置該參數。spring

OkToRetryOnAllOperations

這個參數指的是是否容許全部的HTTP請求(GET,POST,PUT等)重試。默認值是false,只容許GET請求重試。對於POST等請求,請慎重使用。spa

MaxAutoRetries

這個參數用於配置當前實例最大重試次數,默認值爲0。重試次數不包括第一次請求。code

MaxAutoRetriesNextServer

這個參數指的是切換實例最大重試次數,默認值1。htm

若是訪問當前實例異常,會再次嘗試訪問當前實例(次數由MaxAutoRetries決定);若是還不行,就會訪問下一個實例;若是仍然不行,會把下一個實例做爲當前實例並重試(次數由MaxAutoRetries決定)...依此類推,直到切換實例次數達到上限(由MaxAutoRetriesNextServer決定)。總共的重試次數計算公式:blog

1+MaxAutoRetries*(MaxAutoRetriesNextServer+1)+MaxAutoRetriesNextServer

Feign的重試配置

新版Feign中無縫集成了Ribbon(不管您是否真的須要Ribbon😂),因此Ribbon的重試配置在Feign中仍然有效。雖然Feign自己具有重試功能,但不建議使用,由於會和Ribbon的重試一塊兒使用會形成混亂。路由

Zuul的重試配置

由於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包。

參考連接

相關文章
相關標籤/搜索