重试失败的请求 Spring Cloud

Spring Cloud Netflix 提供了各种HTTP请求的方式。
你可以使用负载均衡的RestTemplate, Ribbon, 或者 Feign。
无论你选择如何创建HTTP请求,都存在请求失败的可能性。
当一个请求失败时,你可能想它自动地去重试。
当使用Sping Cloud Netflix时,这么做,你需要在应用的classpath引入Spring Retry。
当存在Spring Retry,负载均衡的RestTemplates, Feign, 和 Zuul,会自动地重试失败的请求(假设你的配置允许这样做)。
 
1、补偿策略
默认情况下,请求重试禁用补偿策略。
如果你想配置一个补偿策略,你需要创建一个LoadBalancedRetryFactory类型的bean,并且覆盖service的createBackOffPolicy 方法,像下面例子所示:

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


2、配置
 当你在Ribbon使用Spring Retry 时,你可以控制重试功能,通过配置某些的Ribbon属性。
 这样做:设置client.ribbon.MaxAutoRetries, client.ribbon.MaxAutoRetriesNextServer, 和 client.ribbon.OkToRetryOnAllOperations 属性。
 这些属性如何设置具体查看Ribbon文档的描述。
 
 提醒:
 启用client.ribbon.OkToRetryOnAllOperations 包括POST请求重试,由于请求体缓冲,这对服务器的资源可能产生影响
 
 此外,你可能想重试请求时在响应中返回某些状态码。你可以设置clientName.ribbon.retryableStatusCodes属性 列出你想在Ribbon客户端重试时返回的的响应码。像下面例子所示:

 clientName:
  ribbon:
    retryableStatusCodes: 404,502


    
 你还可以创建一个LoadBalancedRetryPolicy 类型的bean,并且实现retryableStatusCode方法,返回请求重试的状态码。
    
3、Zuul
你可以关掉重试功能,通过设置

zuul.retryable=false


你还可以禁用重试功能,通过设置

zuul.routes.routename.retryable=false

 

转载于:https://my.oschina.net/benz001/blog/3000774

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值