Feign Client 超时时间配置
在Spring Boot微服务架构中,大部分公司都是利用Open Feign进行服务间的调用,而在业务场景比较简单的时候,使用默认配置是不会遇到多大问题的。但是如果业务比较复杂,服务要进行比较繁杂的业务计算,那后台很有可能会出现Read Timeout这个异常,因此定制化配置超时时间就有必要了。
影响到feign接口超时时间的主要有三类配置:feign、ribbon、hystrix和OKhttp(若配置)。
feign配置:
feign:
client:
config:
default: // 所有服务级别设置,default为任意服务
connectTimeout: 毫秒时间,建立TCP连接的超时时间,一般只在发现服务时用到
readTimeout: 毫秒时间,读取超时时间
remote-server-name: // 指定某个feign的名称,如果配置contextId,则必须配其contextId。指定调用remote-server-name服务时的超时时间
connectTimeout: 200
readTimeout: 3000
连接超时:用 feign.client.config.default.connectTimeout=700
设置。当你发起一个 Feign 请求时,它会尝试与目标服务建立连接,即进行TCP三次握手。如果这个过程超过了你设置的连接超时时间(如 700 毫秒),就会触发 java.net.SocketTimeoutException。
读取超时:用 feign.client.config.default.readTimeout=1600
设置。一旦连接建立成功,Feign 开始等待服务端响应。如果等待响应的时间超过了readTimeout设置的时间,就会触发 feign.RetryableException。
ribbon配置
ribbon:
ReadTimeout: 毫秒时间, 同feign的
ConnectTimeout:毫秒时间 , 同feign的
feign和ribbon的配置二选一即可,因为这两个配置都相当于是ribbon的配置,不同点在于feign的配置在ribbon的基础上做了扩展,可以支持配置服务级别的超时时间。如果feignClient中使用了url,超时时间也可以生效,但是,即便是设置了ribbon url,其超时时间却不会生效,因为指定了url就不需要走ribbon的负载均衡逻辑。
Ribbon和Feign都有全局的配置和局部的配置,但是它们的优先级不同,springCloud选择两种配置的优先级顺序为:Feign局部配置 > Feign全局配置 > Ribbon局部配置 > Ribbon全局配置
,所以如果一个服务既配置了Ribbon超时时间也配置了Feign超时时间,那么Feign局部配置会覆盖掉其它配置。
hystrix
hystrix:
command:
default: #这个代表接口,default为任意接口, 可以配置为指定接口
execution:
isolation:
thread:
timeoutInMilliseconds: 毫秒时间
Hystrix配置也分为全局和局部,只需要替换default为指定服务名即为局部配置。
hystrix配置的超时时间理论上应该要比 feign和ribbon的要大,因为feign和ribbon可以配置失败重试。当然最终的超时时间是以feign(或ribbon)和hystrix中最小时间为准。所以在单独设置某个接口的超时时间时,如果设置的超时时间比feign的要小,则可以生效。如果设置的时间比feign的要大,则会以feign的超时时间为准。
OKhttp配置
如果feign client结合OKhttp使用,则OKhttp也需要配置超时时间,关于如何配置,请猛戳《OKhttp超时时间配置》。
小结
如何配置好Hystrix和Ribbon的超时时间呢?其实是有套路的,因为Feign的请求其实是Hystrix+Ribbon。Hystrix在最外层,然后再到Ribbon,最后里面的是http请求。故,Hystrix的熔断时间必须大于Ribbon的 (ConnectTimeout + ReadTimeout);而如果Ribbon开启了重试机制,还需要乘以对应的重试次数,保证在Ribbon里的请求还没结束时,Hystrix的熔断时间不会超时。
为了简单,我们在工作中,如无必要,仅仅配置feign和OKhttp的过期时间即可,无需都配置。
Reference
- https://app.yinxiang.com/shard/s56/nl/12432503/8e564aae-5109-4ceb-bb9b-165d61ffe85a/
- https://www.cnblogs.com/kancy/p/13033021.html
Feign Client 超时时间配置的更多相关文章
- Spring Cloud之Feign客户端超时时间配置
关于雪崩效应: 默认情况下tomcat只有一个线程去处理客户端发送的所有请求.高并发情况下,如果客户端请求都在同一接口,tomcat的所有线程池去处理,导致其他接口服务访问不了,等待. Tomcat有 ...
- hystrix ,feign,ribbon的超时时间配置,以及原理分析
背景,网上看到很多关于hystrix的配置都是没生效的,如: 一.先看测试环境搭建: order 服务通过feign 的方式调用了product 服务的getProductInfo 接口 //---- ...
- Nginx中超时时间配置(转)
本文介绍 Nginx 的 超时(timeout)配置.分享给大家,具体如下: Nginx 处理的每个请求均有相应的超时设置.如果做好这些超时时间的限定,判定超时后资源被释放,用来处理其他的请求,以此提 ...
- Java发送邮件必带超时时间配置
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在线上遇到了一个发送邮件的问题,记录一下. 一.先说 ...
- 关于调用Feign client超时得不到结果的问题
需要在调用方的配置文件加入以下配置 hystrix.command.default.execution.timeout.enabled: false ribbon: ConnectTimeout: R ...
- springcloud之Feign、ribbon设置超时时间和重试机制的总结
一 超时时间配置 如果在一个微服务当中对同一个接口同时配置了Hystrix与ribbon两个超时时间,则在接口调用的时候,两个计时器会同时读秒. 比如,访问一个接口需要2秒,你的ribbon配置的超时 ...
- SpringCloud Feign 之 超时重试次数探究
SpringCloud Feign 之 超时重试次数探究 上篇文章,我们对Feign的fallback有一个初步的体验,在这里我们回顾一下,Fallback主要是用来解决依赖的服务不可用或者调用服务失 ...
- 【Spring Cloud 源码解读】之 【如何配置好OpenFeign的各种超时时间!】
关于Feign的超时详解: 在Spring Cloud微服务架构中,大部分公司都是利用Open Feign进行服务间的调用,而比较简单的业务使用默认配置是不会有多大问题的,但是如果是业务比较复杂,服务 ...
- mybatis配置sql超时时间
mybatis如果不配置,默认超时时间是不做限制的.当系统慢sql很多时,势必会增加数据库压力,系统性能及稳定性降低.所以有必要要设置sql超时设置,下面配置超时时间是5分钟. 第一步:全局配置如下 ...
- SpringBoot配置RestTemplate的代理和超时时间
application.properties: #代理设置 proxy.enabled=false proxy.host=192.168.18.233 proxy.port=8888 #REST超时配 ...
随机推荐
- Echarts与Vue3中获取DOM节点可能出现的异常错误
useTemplateRef 的简单介绍 官方:返回一个浅层 ref,其值将与模板中的具有匹配 ref attribute 的元素或组件同步. 参数匹配机制:useTemplateRe的参数需与模板 ...
- PHP中类和对象相关的函数
1.class_exists 用于判断一个类是否存在,参数为类名: 2.interface_exists 判断一个接口是否存在,参数为接口名: 3.method_exists 判断一个方法是否存在,参 ...
- [WinUI 3] 模仿 Visual Studio 的 Docking 控件
WinUI 3 是什么? WinUI 3 是微软前几年推出的一款 UI 框架,它是 UWP 的升级版,支持 Win32 和 WinUI 3 混合开发.并且 WinUI 3 的设计风格更加现代化. 无论 ...
- mac 如何开启指定端口供外部访问?
前言 需要 mac 上开放指定端口,指定 ip 访问 解决 在 macOS 上开放一个端口,并指定只能特定的 IP 访问,可以使用 macOS 内置的 pfctl(Packet Filter)工具来实 ...
- gorm stdErr = sql: Scan error on column index 0, name "total": converting NULL to float64 is unsupported
前言 使用 gorm 查询时,报错:stdErr = sql: Scan error on column index 0, name "total": converting NUL ...
- 搭建自己的OCR服务,第二步:PaddleOCR环境安装
PaddleOCR环境安装,遇到了很多问题,根据系统不同问题也不同,不要盲目看别人的教程,有的教程也过时了,根据实际情况自己调整. 我这边目前是使用windows 10系统+CPU + python ...
- 高德地图api标记点和线段重合点击响应问题
问题现象: 现在地图上放置了line和marker,marker在line的上层显示 这时line和marker同时存在,当line和marker有重合部分并点击重合点时,只响应line对应的clic ...
- 手写Rpc框架-1
手写Rpc框架 - 导读 git仓库-all-rpc GTIEE:https://gitee.com/quercus-sp204/all-rpc [参考源码 yrpc] 1. Rpc概念 RPC 即远 ...
- Windows核心编程 进程与线程
进程 Windows作为多任务操作系统,允许多个程序同时在系统中运行.这些程序被称为进程,进程运行在一片独立的空间中,受到操作系统保护,操作系统的很多资源都是围绕着进程来进行分配,可以理解为操作系统维 ...
- 实现领域驱动设计 - 使用ABP框架 - 更新操作实体
用例演示 - 更新 / 操作实体 一旦一个实体被创建,它将被用例更新/操作,直到它从系统中删除.可以有不同类型的用例直接或间接地更改实体 在本节中,我们将讨论更改 Issue 的多个属性的典型更新操作 ...