在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

Feign Client 超时时间配置的更多相关文章

  1. Spring Cloud之Feign客户端超时时间配置

    关于雪崩效应: 默认情况下tomcat只有一个线程去处理客户端发送的所有请求.高并发情况下,如果客户端请求都在同一接口,tomcat的所有线程池去处理,导致其他接口服务访问不了,等待. Tomcat有 ...

  2. hystrix ,feign,ribbon的超时时间配置,以及原理分析

    背景,网上看到很多关于hystrix的配置都是没生效的,如: 一.先看测试环境搭建: order 服务通过feign 的方式调用了product 服务的getProductInfo 接口 //---- ...

  3. Nginx中超时时间配置(转)

    本文介绍 Nginx 的 超时(timeout)配置.分享给大家,具体如下: Nginx 处理的每个请求均有相应的超时设置.如果做好这些超时时间的限定,判定超时后资源被释放,用来处理其他的请求,以此提 ...

  4. Java发送邮件必带超时时间配置

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在线上遇到了一个发送邮件的问题,记录一下. 一.先说 ...

  5. 关于调用Feign client超时得不到结果的问题

    需要在调用方的配置文件加入以下配置 hystrix.command.default.execution.timeout.enabled: false ribbon: ConnectTimeout: R ...

  6. springcloud之Feign、ribbon设置超时时间和重试机制的总结

    一 超时时间配置 如果在一个微服务当中对同一个接口同时配置了Hystrix与ribbon两个超时时间,则在接口调用的时候,两个计时器会同时读秒. 比如,访问一个接口需要2秒,你的ribbon配置的超时 ...

  7. SpringCloud Feign 之 超时重试次数探究

    SpringCloud Feign 之 超时重试次数探究 上篇文章,我们对Feign的fallback有一个初步的体验,在这里我们回顾一下,Fallback主要是用来解决依赖的服务不可用或者调用服务失 ...

  8. 【Spring Cloud 源码解读】之 【如何配置好OpenFeign的各种超时时间!】

    关于Feign的超时详解: 在Spring Cloud微服务架构中,大部分公司都是利用Open Feign进行服务间的调用,而比较简单的业务使用默认配置是不会有多大问题的,但是如果是业务比较复杂,服务 ...

  9. mybatis配置sql超时时间

    mybatis如果不配置,默认超时时间是不做限制的.当系统慢sql很多时,势必会增加数据库压力,系统性能及稳定性降低.所以有必要要设置sql超时设置,下面配置超时时间是5分钟. 第一步:全局配置如下 ...

  10. SpringBoot配置RestTemplate的代理和超时时间

    application.properties: #代理设置 proxy.enabled=false proxy.host=192.168.18.233 proxy.port=8888 #REST超时配 ...

随机推荐

  1. SICK Ranger3源码分析——断线重连

    前言 本文可在https://paw5zx.github.io/SICK-Ranger3-source-code-analysis-01/中阅读,体验更加 简单分析一下SICK Ranger3源码中断 ...

  2. go 限流器 rate

    前言 Golang 官方提供的扩展库里就自带了限流算法的实现,即 golang.org/x/time/rate.该限流器也是基于 Token Bucket(令牌桶) 实现的. 限流器的内部结构 tim ...

  3. PVE常用命令

    1.查看集群下的节点信息 root@pve63-node172:~# pvecm nodes Membership information ---------------------- Nodeid ...

  4. 国内四大骨干网与十大ISP服务商

    1.骨干网 几台计算机连接起来,互相可以看到其他人的文件,这叫局域网,整个城市的计算机都连接起来,就是城域网,把城市之间连接起来的网就叫骨干网.这些骨干网是国家批准的可以直接和国外连接的互联网.其他有 ...

  5. Browser-use 详细介绍&使用文档

    Browser-use 详细介绍&使用文档 一.概述 Browser-use 是一个旨在将 AI "智能体"(Agents)与真实浏览器进行交互的 Python 库,可以轻 ...

  6. UML中的各种关系

    各种关系 UML中的各种关系一览表 名称 英文名称 符号 描述 实现方法 耦合强度 举例 关键词 备注 依赖 dependency 1.当类与类之间有使用关系时就属于依赖关系:2.依赖不具有" ...

  7. 在IIS Express下部署NuGet私服

    用途 个人开发,部署自己的NuGet pkg. 环境 Win11 IIS Express (轻度使用,不安装IIS,而使用VS预装的IIS Express) VS2022 步骤 开发环境准备 因我拟用 ...

  8. 《机器人SLAM导航核心技术与实战》先导课:课程大纲

    <机器人SLAM导航核心技术与实战>先导课:课程大纲 视频讲解 [先导课]1.课程大纲-视频讲解 [先导课]1.1.课程大纲-学习思维导图(上)-视频讲解 [先导课]1.2.课程大纲-学习 ...

  9. Python科学计算系列10—数论

    1.常用操作 代码如下: # coding=utf-8 from sympy import * from sympy.ntheory.modular import solve_congruence, ...

  10. Java并发编程实战-多线程任务执行

    Executor框架与线程池(ThreadPoolExecutor) Executor框架的组成 组件 作用 Executor 基础接口,仅定义execute(Runnable)方法,用于执行任务. ...