日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Feign客戶端消費服務超時:com.netflix.hystrix.exception.HystrixRuntimeException:timed-out and fallback failed

作者:huayang183 更新時間: 2022-03-14 編程語言

一. 背景

在微服務項目中,我的服務消費使用的是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

原文鏈接:https://blog.csdn.net/qq_18671415/article/details/120915925

欄目分類
最近更新