SpringCloud Feign 之 超时重试次数探究
SpringCloud Feign 之 超时重试次数探究
上篇文章,我们对Feign的fallback有一个初步的体验,在这里我们回顾一下,Fallback主要是用来解决依赖的服务不可用或者调用服务失败或超时,使用默认的返回值。实际应用中, 在Fallback之前,需要对服务配置重试机制,当多次重试服务,还是服务不可用的情况下,就触发Fallback。
这里,我们对重试机制配置以及重试次数进行一次探究。
Feign的超时
Feign接口调用分两层,Ribbon(负载均衡)和Hystrix(熔断器)的调用,因此Feign的超时时间就是
ribbon的超时时间和Hystrix的超时时间的结合(不是简单相加)。
##hystrix的超时时间
hystrix:
command:
default:
execution:
timeout:
enabled: true
isolation:
thread:
timeoutInMilliseconds: 60000
##Ribbon超时
ribbon:
ConnectTimeout: 20000 #毫秒 连接超时时间
ReadTimeout: 20000 #毫秒 逻辑处理超时时间
正常情况下,因为Ribbon有重试机制,所以Ribb的超时时间是 < Hystrix熔断的超时。
Feign的重试
Feign的重试机制在源码中默认关闭的,因为Ribbon的重试机制和Fiegn原来的重试机制冲突,所以在一般情况下,Feign的重试机制指的就是Ribbon的重试机制,本文也是如此。
Ribbon超时重试
##Ribbon超时重试配置
ribbon:
ConnectTimeout: 20000 #毫秒 连接超时时间
ReadTimeout: 20000 #毫秒 逻辑处理超时时间
OkToRetryOnAllOperations: true # 是否对所有操作都进行重试
MaxAutoRetries: 2 # 对当前实例的最大重试次数(请求服务超时6s则会再请求一次)
MaxAutoRetriesNextServer: 1 # 切换实例的最大重试次数(如果还失败就切换下
Ribbon超时重试次数(总的请求次数):(MaxAutoRetries+1)*(MaxAutoRetriesNextServer+1)
如果Ribbon没有配置重试时间和次数,默认1S超时,默认重试1次。
重试次数验证
设置超时时间2S,在demo中sleep 3S,会发现请求了6次。

不配置重试时间和次数,sleep 3S,重试1次,一共请求2次。

根据测试结果,可看出结论正确。总的请求次数):(MaxAutoRetries+1)*(MaxAutoRetriesNextServer+1)
其他
如果重试期间,调用时间超过了 Hystrix熔断的超时时间,便会立即熔断,进行FallBack。
根据上面描述可大致计算出Hystrix可以参考的超时时间,来保持可以使用到重试机制。
hystrix超时时间的计算:(MaxAutoRetries+1)*(MaxAutoRetriesNextServer+1) * (ConnectTimeout+ReadTimeout) 。
当ribbon超时后且hystrix没有超时,就会使用到重试机制。
默认情况下,GET方式请求无论是连接异常还是读取异常,都会进行重试,非GET方式请求,只有连接异常时,才会进行重试(从其他博文学习到,暂未验证)
demo地址:https://github.com/lanxuan826/sample-library/tree/master/feigndemo-fallback
SpringCloud Feign 之 超时重试次数探究的更多相关文章
- SpringCloud Feign重试详解
摘要: 今天在生产环境发生了数据库进程卡死的现象,除了sql因为全量更新,没加索引的原因,最主要还是我们的接口的服务器端接口出现问题了.忽视了更新接口的幂等性,以及调用方feign client的重试 ...
- SpringCloud Fegin超时重试源码
springCloud中最重要的就是微服务之间的调用,因为网络延迟或者调用超时会直接导致程序异常,因此超时的配置及处理就至关重要. 在开发过程中被调用的微服务打断点发现会又多次重试的情况,测试环境有的 ...
- 【springcloud】Zuul 超时、重试、并发参数设置
转自:https://blog.csdn.net/xx326664162/article/details/83625104 一. Zuul 服务网关 服务网关 = 路由转发 + 过滤器 1.路由转发: ...
- springcloud超时重试机制的先后顺序
https://blog.csdn.net/zzzgd_666/article/details/83314833
- SpringCloud | FeignClient和Ribbon重试机制区别与联系
在spring cloud体系项目中,引入的重试机制保证了高可用的同时,也会带来一些其它的问题,如幂等操作或一些没必要的重试. 今天就来分别分析一下 FeignClient 和 Ribbon 重试机制 ...
- Spring Cloud Feign 自定义配置(重试、拦截与错误码处理) 实践
Spring Cloud Feign 自定义配置(重试.拦截与错误码处理) 实践 目录 Spring Cloud Feign 自定义配置(重试.拦截与错误码处理) 实践 引子 FeignClient的 ...
- [Java复习]架构部署 超时重试 幂等防重
画一下你们系统的整体架构图,说说各个服务在生产环境怎么部署的? 核心:服务框架.注册中心.网关 即使你没有用很多微服务架构里的东西,只要有上述三个东西,配合上写一些文档,接口文档,分布式系统架构,其实 ...
- springcloud的Zuul配置重试和fallback
可以参考如下blog: SpringCloud学习03之api服务网关zuul反向代理及重试配置 springCloud学习04之api服务网关zuul回退fallback 注意:重试的开启需要处理幂 ...
- Dubbo重试次数
服务超时后重试次数[retries],不包含第一次调用,0代表不重试 *我们应该在幂等方法上设置重试次数[查询.删除.修改],在非幂等方法上禁止设置重试次数. ★幂等:指多次运行方法所产生的最终效果是 ...
随机推荐
- 一 安装docker(详解)
一.安装docker 1 Docker 要求 CentOS 系统的内核版本高于 3.10 执行命令:uname -r 2 添加yum源: yum-config-manager --add-repo h ...
- E-Explorer_2019牛客暑期多校训练营(第八场)
题意 n个点,m条边,u,v,l,r表示点u到点v有一条边,且只有编号为\([l,r]\)的人能通过,问从点1到点n有哪些编号的人能通过 题解 先对\(l,r\)离散化,用第七场找中位数那题同样的形式 ...
- VS2017 之 MYSQL实体数据模
Photon Server 和 Unity3D 数据交互: Photon Server 服务端编程 Unity3D 客户端编程 VS2017 之 MYSQL实体数据模 一.新建数据库连接后,点击下一步 ...
- 蚂蚁SOFA系列(2) - SOFABoot的Readiness健康检查机制
作者:404,公众号404P,转载请注明出处. 前言 SOFABoot是蚂蚁金服的开源框架,在原有Spring Boot的基础上增强了不少能力,例如Readiness Check,类隔离,日志空间隔离 ...
- Mybatis源码阅读-配置文件及映射文件解析
Mybatis源码分析: 1.配置文件解析: 1.1源码阅读入口: org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(); 功能:解析全局配置文 ...
- C# 表达式树遍历(二)
一.前言 上一篇我们对表达式树有了初步的认识,这里我们将对表达式树进行遍历,只有弄清楚了他的运行原理,我们才可以对他进行定制化修改. 表达式系列目录 C# 表达式树讲解(一) C# 表达式树遍历(二) ...
- Java 13 明天发布,最新最全新特性解读
2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的3月份和9月份发布. 目前,JDK官网上已经可以看到JDK 13的进展,最新版的JDK ...
- Redis小白入门系列
一.从NoSQL说起 NoSQL 是 Not only SQL 的缩写,大意为"不只是SQL",说明这项技术是传统关系型数据库的补充而非替代.在整个NoSQL技术栈中 MemCac ...
- Flink入门宝典(详细截图版)
本文基于java构建Flink1.9版本入门程序,需要Maven 3.0.4 和 Java 8 以上版本.需要安装Netcat进行简单调试. 这里简述安装过程,并使用IDEA进行开发一个简单流处理程序 ...
- IDEA 配置Springboot项目热部署
实现的方式概述 注意以下的热部署方式在IDEA是默认没有打开自动编译的,手动编译需要快捷键(Ctrl+Shift+F9),自动编译的修改配置如下:(注意刷新不要太快,会有1-2秒延迟) File-Se ...