Feign客户端消费服务超时:com.netflix.hystrix.exception.HystrixRuntimeException:timed-out and fallback failed

本文介绍了在微服务项目中遇到Feign客户端调用服务超时的问题,分析了Hystrix和Ribbon的超时机制,并提供了调整超时时间的解决方案。当10秒的超时仍不足以应对网络延迟时,讨论了禁用Hystrix的三种方法,包括在配置中全局禁用、禁用超时限制以及禁用Feign的Hystrix支持。建议采用修改超时配置来优化服务稳定性。
摘要由CSDN通过智能技术生成

一. 背景

在微服务项目中,我的服务消费使用的是Feign客户端,在调用服务提供者提供的接口时,报超时异常了,异常如下:

com.netflix.hystrix.exception.HystrixRuntimeException: RemoteCardImgHandleFeign#getVehicleLicenseInfos(CardInfosVi) timed-out and fallback failed.

在这里插入图片描述

二. Feign设置超时时间

1.使用Feign调用接口分两层,ribbon的调用和hystrix的调用,所以ribbon的超时时间和Hystrix的超时时间的结合就是Feign的超时时间
2. 一般情况下 都是 ribbon的超时时间(<)hystrix的超时时间(因为涉及到ribbon的重试机制),如果ribbon 的超时时间大于hystrix的超时时间,对于ribbon的重试是没有意义的(hystrix超时熔断了,ribbon无法重试)

在这里插入图片描述

三. 原因

Hystrix组件缺省超时判断默认为1秒钟,超过1秒就会报超时异常日志,由于我的服务器是在Linux环境,网络延迟非常大,虽然已经把超时设置成了5秒,但是还是短了,可以将超时再设置长一点。

四. 解决方式

hystrix的默认超时1秒直接改成10秒,由于我的测试环境网络延迟很慢,5秒还是不够,直接设置成10秒

  • application.yml
##feign中使用断路器Hystrix,默认是没有开启的,需要开启
feign:
  hystrix:
    enabled: true
#hystrix的超时时间    
hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: true
        isolation:
          thread:
            #设置请求超时时间,默认1秒,超过指定的时间后,触发服务熔断
            timeoutInMilliseconds: 10000
#ribbon的超时时间
ribbon:
  ReadTimeout: 5000 #设置请求处理的超时时间
  ConnectTimeout: 5000  #设置请求链接的超时时间                     

五、在Feign中禁用Hystrix

  • 第一种:禁用Hystrix:

要基于每个客户端禁用Hystrix支持,请创建Feign.Builder具有“原型”范围的香草,这段话摘自官网,例如:
 

在这里插入图片描述

在这里插入图片描述

import feign.Feign;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

@Configuration
public class FooConfiguration {
   
   
   
    @Bean
    @Scope("prototype")
    public Feign.Builder feignBuilder() {
   
   
   
        return Feign.builder();
    }
}

参考官网资料: https://cloud.spring.io/spring-cloud-static/spring-cloud-openfeign/2.2.2.RELEASE/reference/html/#spring-cloud-feign-hystrix

下面两种方式是比较暴力的一种解决方式,但在实际项目中并不推荐,对服务高可用存在一定的影响,两种我没有测试,还是推荐使用上面第一种

  • 第二种: 禁用Hystrix的请求时间超时限制
#hystrix的超时时间    
hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: false
  • 第三种: 禁用feignhystrix
feign:
  hystrix:
    enabled: false
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huayang183

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值