Spring Cloud 參考文檔(重試失敗的請求)

重試失敗的請求

Spring Cloud Netflix提供了多種方式來發出HTTP請求,你能夠使用負載均衡的RestTemplate、Ribbon或Feign。不管你如何選擇建立HTTP請求,老是有可能請求失敗,請求失敗時,你可能但願自動重試請求,要在使用Sping Cloud Netflix時這樣作,你須要在應用程序的類路徑中包含Spring Retry。當存在Spring Retry時,負載均衡的RestTemplates、Feign和Zuul會自動重試任何失敗的請求(假設你的配置容許這樣作)。git

退避策略

默認狀況下,重試請求時不使用退避策略,若是要配置退避策略,則須要建立類型爲LoadBalancedRetryFactory的bean並覆蓋給定服務的createBackOffPolicy方法,如如下示例所示:github

@Configuration
public class MyConfiguration {
    @Bean
    LoadBalancedRetryFactory retryFactory() {
        return new LoadBalancedRetryFactory() {
            @Override
            public BackOffPolicy createBackOffPolicy(String service) {
                return new ExponentialBackOffPolicy();
            }
        };
    }
}

配置

將Ribbon與Spring Retry一塊兒使用時,能夠經過配置某些Ribbon屬性來控制重試功能,爲此,請設置client.ribbon.MaxAutoRetriesclient.ribbon.MaxAutoRetriesNextServerclient.ribbon.OkToRetryOnAllOperations屬性,有關這些屬性的說明,請參閱Ribbon文檔spring

啓用 client.ribbon.OkToRetryOnAllOperations包括重試POST請求,因爲請求body的緩衝,POST請求會對服務器的資源產生影響。

此外,你可能但願在響應中返回某些狀態碼時重試請求,你能夠經過設置clientName.ribbon.retryableStatusCodes屬性列出你但願Ribbon客戶端重試的響應碼,如如下示例所示:segmentfault

clientName:
  ribbon:
    retryableStatusCodes: 404,502

你還能夠建立類型爲LoadBalancedRetryPolicy的bean,並實現retryableStatusCode方法以在給定狀態碼的狀況下重試請求。服務器

Zuul

你能夠經過將zuul.retryable設置爲false來關閉Zuul的重試功能,你還能夠經過將zuul.routes.routename.retryable設置爲false來逐個路由地禁用重試功能。負載均衡


上一篇:使用Sidecar支持多語言

相關文章
相關標籤/搜索