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支持多语言

相关文章
相关标签/搜索