Ribbon/Feign 超时,重试配置

一、Ribbon 超时设置


1.全局设置,所有的ribbon客户端都会生效

     ribbon.ReadTimeout=2000 # 设置读取时间为2s
     ribbon.ConnnectTimeout=1000 #tcp建立连接的时间,内网一般设置1s以内


2.独立设置某个服务的ribbon调用超时时间

    该设置会覆盖掉全局配置,servicename为调用服务在注册中心注册服务名称

     servicename.ribbon.ReadTimeout=2000 # 设置读取时间为2s
     servicename.ribbon.ConnnectTimeout=1000 #tcp建立连接的时间,内网一般设置1s以内


Ribbon 重试设置
1.需要引入spring的重试模块组件,否则配置不生效,这点一定要注意

    <!--  RestTemplate Fegin  Ribbon 调用重试需要引入次包           -->
            <dependency>
                <groupId>org.springframework.retry</groupId>
                <artifactId>spring-retry</artifactId>
                <version>1.3.0</version>
            </dependency>


2.全局设置,这设置调用失败的话,当前服务重试一次,如果不成功,重试下一个服务一次
     ribbon.MaxAutoRetries=1 # 重试当前服务最大次数,默认1
     ribbon.MaxAutoRetriesNextServer=1 #下一个服务的重试次数 ,默认1
     ribbon.OkToRetryOnAllOperations= false #是否所有操作都重试,默认false
       # false:get请求中,连接超时,读取超时都会重试,其他请求(put,post)连接超时重试,读取超时不重试。
        # true:get请求中,连接超时,读取超时都会重试,其他请求(put,post)连接超时重试,读取超时重试。
3.独立设置某个服务的ribbon调用超时时间

    该设置会覆盖掉全局配置,servicename为调用服务在注册中心注册服务名称

    servicename.ribbon.OkToRetryOnAllOperations #对所有的操作都进行重试,默认是GET请求进行重试
     servicename.ribbon.MaxAutoRetries=1 # 重试当前服务最大次数
     servicename.MaxAutoRetriesNextServer=1 #下一个服务的重试次数


二、Fegin超时设置

spring cloud 也对Feign 提供了其他配置方式,比如这里服务名称为  user-service ,不过这种方式设置超时,不能使用配置中心动态调整超时时间,这点需要特别注意。

1、全局配置

      feign.client.config.default.read-timeout=2000   # 设置读取时间为2s
      feign.client.config.default.connect-timeout=1000 #tcp连接超时时间1s以内     

2、根据服务名设置

      feign.client.config.user-service.read-timeout=2000   # 设置读取时间为2s
      feign.client.config.user-service.connect-timeout=1000 #tcp连接超时时间1s以内     


Fegin重试设置

需要实现Retryer接口,默认不重试:Retryer.NEVER_RETRY这里以使用Feign 的默认实现Default为例配置,这里使用bean的方式配置,这里配置 最大重试次次数是5次,最大重试时间1s,每次重试间隔100ms

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
     
    import feign.Retryer;
     
    import static java.util.concurrent.TimeUnit.SECONDS;
     
    @Configuration
    public class AppConfig {
     
     
     
        @Bean
        public Retryer feignRetryer(){
     
            return new Retryer.Default(1,SECONDS.toMillis(1), 5);
        }
     
     
    }

三、FeignClient指定超时时间

@FeignClient(value = "servicename",configuration = TimeOutFeignConfig.class)
public class TimeOutFeignConfig {
    @Bean
    Request.Options options() {
        return new Request.Options(10000, 10000);
    }
}

四、hystrix超时配置

#开启feign的fallback功能
feign.hystrix.enabled=true
#默认hystrix处理超时时长
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=60000

如果在重试期间,时间超过了hystrix的超时时间,便会立即执行熔断,fallback。

因此hystrix的超时时间要考虑到ribbon和feign的重试时间

hystrix超时时间的计算:feign(默认5次) * (1 + MaxAutoRetries )*(1+ MaxAutoRetriesNextServer) *(ReadTimeout +ConnectTimeout)

其他注意:

关于超时时间的优先级 ribbon<feign<hystrix

        都没配置超时时间,则用 ribbon  默认的超时时间1秒

        都配置了则用feign的

TimeOutFeignConfig 类上不能加@Configuration,不然会全局生效

服务名区分大小写

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值