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

news2024/11/26 10:48:27

目录标题

  • 超时时间
    • ribbon和Feign
      • ribbon和Feign默认超时时间
      • 关于ribbon和Feign超时时间配置说明
    • 关于hystrix默认超时时间与配置说明
  • ribbon的重试机制
    • 重试的次数
    • hystrix超时时间
    • 举个例子

超时时间

feign/ribbon对应的是请求的时间
hystrix对应的是断路器的时间

一般情况下 都是 ribbon 的超时时间(<)hystrix的超时时间(因为涉及到ribbon的重试机制)

ribbon和Feign

ribbon和Feign默认超时时间

ribbon和Feign默认超时时间都是1s。

关于ribbon和Feign超时时间配置说明

Feign 和 Ribbon 的超时时间只会有一个生效。
当我们没有显式配饰feign的超时时间的是时候,如果配置了ribbon的超时时间,则只有这个配置会生效,feign默认的1s超时无效
如果我们feign和ribbon的超时时间都配置了,会以feign配置的为准

feign设置单个接口超时:通过指定的contextId。
ribbon不能指定单个接口超时时间,可以用feign配置单个接口超时,feign和ribbon配置超时同时存在时,feign的配置生效。

关于hystrix默认超时时间与配置说明

如果配置了hystrix功能,那么它的超时时间默认就是开启的,且该时间是1秒,这个时间和ribbon的超时时间会同时起作用,不像上面的feign的超时时间和ribbon超时时间二选一,我们可以通过上面的配置hystrix的超时时间让它更长,或者显式禁用hystrix的超时时间

ribbon的重试机制


ribbon:
  #连接超时时间(ms)
  ConnectTimeout: 6000
  #业务逻辑超时时间(ms)
  ReadTimeout: 6000
  
  #同一台实例最大重试次数,不包括首次调用(对当前实例的重试次数)
  MaxAutoRetries: 1
  #重试负载均衡其他的实例最大重试次数,不包括首次调用(切换实例的重试次数)
  MaxAutoRetriesNextServer: 1
  #是否所有操作都重试
  ribbon.OkToRetryOnAllOperations: false

ribbon.MaxAutoRetries 设置为1,请求某服务6s超时后准备重试,该重试策略会先尝试再访问该实例,如果失败1次之后才更换实例访问。 ribbon.MaxAutoRetriesNextServer 决定了尝试更换1次实例。

重试的次数

(MaxAutoRetries+1)* (MaxAutoRetriesNextServer+1)- 1 即重试3次 则一共产生4次调用。

hystrix超时时间

如果在重试期间,时间超过了hystrix的超时时间,便会立即执行熔断,fallback。所以要根据上面配置的参数计算hystrix的超时时间,使得在重试期间不能达到hystrix的超时时间,不然重试机制就会没有意义。
hystrix超时时间的计算: (1 + MaxAutoRetries )*(1+ MaxAutoRetriesNextServer) *(ReadTimeout +ConnectTimeout)。

如果服务没下线,ConnectTimeout可以忽略不计;最接近的实际时间 (1 + MaxAutoRetries )*(1+
MaxAutoRetriesNextServer) *(ReadTimeout);
一般ReadTimeout > ConnectTimeout,所以hystrix的超时时间设置可以以这个计算为准;

当ribbon超时后且hystrix没有超时,便会采取重试机制。当OkToRetryOnAllOperations设置为false时,只会对get请求进行重试。如果设置为true,便会对所有的请求进行重试,如果是put或post等写操作,如果服务器接口没做幂等性,会产生不好的结果,所以OkToRetryOnAllOperations慎用。

如果不配置ribbon的重试次数,默认会重试一次
注意:
默认情况下,GET方式请求无论是连接异常还是读取异常,都会进行重试
非GET方式请求,只有连接异常时,才会进行重试

举个例子

ribbon:
  ReadTimeout: 2000
  ConnectTimeout: 2000
  MaxAutoRetries: 1 #同一台实例最大重试次数,不包括首次调用
  MaxAutoRetriesNextServer: 3 #重试负载均衡其他的实例最大重试次数,不包括首次调用
  OkToRetryOnAllOperations: true  #是否所有操作都重试

在这里插入图片描述
在这里插入图片描述
可以看到2台机器分别被请求了四次,而且每个时间的间隔大约为2秒左右。一开始请求的是8083接口,请求的次数为8083,8083,8081,8081,8083,8083,8081,8083。

那它的计算公式为:(MaxAutoRetries+ 1)*(MaxAutoRetriesNextServer+1) =8次。

https://blog.csdn.net/qq_29860591/article/details/120916339
https://blog.csdn.net/wounler/article/details/124178411
https://blog.csdn.net/east123321/article/details/82385816
https://www.jianshu.com/p/b470a2352881
https://blog.csdn.net/east123321/article/details/82385816

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/460788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】2. 常见指令

1. 操作系统的定义 在真正了解Linux操作系统之前&#xff0c;我们需要初步明确什么是操作系统 Linux下的基本指令 指令的作用是什么&#xff0c;其实就是相当于Windows的基本操作&#xff0c;Linux操作系统是以命令行显示的&#xff0c;而Windows则是以图形化界面的方式展现…

图像融合方向:《Deep Image Blending》论文理解

《Deep Image Blending》论文理解 论文&#xff1a;《Deep Image Blending》WACV 2020 链接&#xff1a;Deep Image Blending 本文目录 《Deep Image Blending》论文理解论文创新点具体实现思路文中使用的基准方法文章内容解析使用模型整体架构两阶段算法详情第1阶段第2阶段 损…

一款高效、可靠的自动化测试平台,提升效率、降低测试成本

一、开源项目简介 扬帆测试平台是一款高效、可靠的自动化测试平台&#xff0c;旨在帮助团队提升测试效率、降低测试成本。该平台包括用例管理、定时任务、执行记录等功能模块&#xff0c;支持多种类型的测试用例&#xff0c;目前支持API(http和grpc协议)、性能&#xff0c;并且…

轻量级服务器nginx:负载均衡

负载均衡就是让每个设备&#xff0c;以同样的概率&#xff0c;处理用户对于服务器的任务请求&#xff0c;默认采用的负载调度策略就是轮流询问&#xff0c;Nginx作为反向代理服务器安装在服务端&#xff0c;Nginx的功能就是把请求转发给后面的应用服务器. 这里写目录标题 一 负…

差分优化算法——DE

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录 一、DE1.步骤2.特点 二、DE Optimiza1.函数最小值问题2.差分进化算法求解2.Java 实现与结果绘图 一、DE 差分进化算法是一种基于群体智能的优化算法&#xff0c;由Storn和Price于1995年提出&#xff0c;最早用…

vue3+ts开发微信小程序----使用FontAwesome图标的步骤(只适用于面性图标)

vue3ts开发微信小程序----使用FontAwesome图标的步骤&#xff08;只适用于面性图标&#xff09; 因为用的vue3ts 但是对于npm引进FontAwesome来说&#xff0c;好像对于小程序不支持&#xff0c;所以用了引入文件的方式。 下载FontAwesome字体&#xff0c;我用的是5版本的。[官方…

从初识RabbitMQ到安装了解

一、同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;但是你却不…

记 SAM React Demo 转 Vue 遇到的一些问题

前言 SegmentAnything Model (SAM) 是 Meta 开源的分割万物 AI 模型&#xff0c;因笔者主要使用 Vue&#xff0c;因此对官方 Demo 进行了工程迁移工作&#xff0c;这里记录了迁移过程遇到的一些问题。 没有使用多线程加速 官方的 React Demo 项目使用ort-wasm-simd-threaded…

态路小课堂丨浅谈IDC数据中心综合布线互联

在数据中心发展过程中&#xff0c;服务器、光模块等设备更新周期短&#xff0c;迭代快。但是&#xff0c;对于IDC数据中心综合布线系统来说&#xff0c;其使用周期一般都比较长。因此&#xff0c;为了能够匹配IDC数据中心的发展&#xff0c;关于综合布线的设计尤为重要。 目前&…

【vue】elementUI中el-table拖动滚动条的时候固定某一列

文章目录 前言&#xff1a;需求 前言&#xff1a; 写项目的时候有一个需求&#xff0c;就是当el-table的滚动条滑动的时候&#xff0c;可见区域如果没有该列则固定到左侧&#xff0c;由elementUi官方网站可知el-table固定一列的代码如下: fixed为主要的标识 头部固定设置的是t…

leetcode 2336. Smallest Number in Infinite Set(有限集中的最小数字)

实现一个SmallestInfiniteSet类(后面用set简称)&#xff0c;满足以下功能&#xff1a; 初始化时&#xff0c;set含有所有的正整数。 pop函数返回set中最小的整数。 add函数在set中添加一个整数。 思路&#xff1a; set具有以下的功能&#xff1a; 可以取出最小的数字。 可以查…

FPGA入门系列13--异步串口通信

文章简介 本系列文章主要针对FPGA初学者编写&#xff0c;包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解&#xff0c;旨在更快速的提升初学者在FPGA开发方面的能力&#xff0c;每一个章节中都有针对性的代码…

Baklib如何帮助企业设计并维护FAQ页面?

作为现代企业的一部分&#xff0c;客户支持服务是为客户提供解决方案、回答问题和解决技术难题的关键部分。而其中最重要的一个基本工具是FAQ页面&#xff08;Frequently Asked Questions&#xff09;&#xff0c;它可以有效地减轻客户支持压力和提高工作效率。然而&#xff0c…

Linux——进度条与git的使用

目录 main.c Makefile process.c \r process.h 进度条的演示动图 git的使用 在gitee上创建一个仓库 复制HTTPS到xshell git clone .gitignore ​编辑 git add git commit -m 这里写日志信息 git push sudo yum -y install git git log git status git mv / …

vue2之echarts的封装 折线图,饼图,大图

目录 vue2之echarts的封装 折线图&#xff0c;饼图&#xff0c;大图折线图&#xff0c;饼图chartPan.vue使用 chartPan.vue 之饼图效果使用 chartPan.vue 之折线图效果展开大图大图组件 maxChart.vue大图效果 vue2之echarts的封装 折线图&#xff0c;饼图&#xff0c;大图 折线…

视觉回归测试—UI自动化的最后1分钟

视觉回归测试是一种验证应用GUI是否正确地展示给用户的操作。测试目标是找出应用在可视化上存在的软件缺陷&#xff0c;例如&#xff0c;字体、布局和渲染问题。这使得所发现的软件缺陷可在被最终用户看到前得到修正。此外&#xff0c;视觉测试可用于验证页面的内容&#xff0c…

车道线检测

前言 目前&#xff0c;车道线检测技术已经相当成熟&#xff0c;主要应用在自动驾驶、智能交通等领域。下面列举一些当下最流行的车道线检测方法&#xff1a; 基于图像处理的车道线检测方法。该方法是通过图像处理技术从摄像头传回的图像中提取车道线信息的一种方法&#xff0c…

【AI工具 收藏】

文章目录 miniGPT4&#xff1a;chatGPT&#xff0c;支持图片哔哔终结者 BibiGPT&#xff1a;自动总结视频内容Scribble Diffusion&#xff1a;草图绘画ChatGPT Shortcut&#xff1a;prompt提示词其他 博客总结的工具&#xff1a; miniGPT4&#xff1a;chatGPT&#xff0c;支持图…

ROS2下机械手的手眼标定

最近发现老是有人通过爬虫把文章爬去他们网站&#xff0c;因此先发一遍这个草稿&#xff0c;让他们先爬。爬完我再慢慢修改 0.前期准备 0.1机械手要先映射&#xff08;标定好&#xff09;世界坐标系与用户坐标系 这个基本应该可以通过机械手自带的坐标系建立完成 一般机械手…

若依代码生成器的使用方式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、代码生成器是什么&#xff1f;二、使用步骤1.菜单目录2.子菜单3.代码生成的方式 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1…