網站首頁 編程語言 正文
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.Builde
r具有“原型”范圍的香草,這段話摘自官網,例如:
?
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();
}
}
下面兩種方式是比較暴力的一種解決方式,但在實際項目中并不推薦,對服務高可用存在一定的影響,兩種我沒有測試,還是推薦使用上面第一種
- 第二種: 禁用Hystrix的請求時間超時限制
#hystrix的超時時間
hystrix:
command:
default:
execution:
timeout:
enabled: false
- 第三種: 禁用
feign
的hystrix
feign:
hystrix:
enabled: false
原文鏈接:https://blog.csdn.net/qq_18671415/article/details/120915925
相關推薦
- 2022-06-01 Snort中pcre和正則表達式的使用詳解_正則表達式
- 2022-12-29 python解決循環依賴的問題分析_python
- 2022-04-08 WPF轉換器IValueConverter用法_實用技巧
- 2022-05-22 C#單例模式與多線程用法介紹_C#教程
- 2022-12-31 C++模擬Linux?Shell編寫一個自定義命令_C 語言
- 2023-07-03 Redis 中 List(列表)類型的命令及詳解
- 2022-11-14 Python?prettytable模塊應用詳解_python
- 2022-07-24 Golang實現文件夾的創建與刪除的方法詳解_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支