《Spring Cloud 》Eureka服务调用服务超时重试机制

问题根源

问题根源有二:
1):业务耗时时间比较长,超过服务调用超时时间配置,由于Spring Cloud 服务调用超时重试机制默认开启,所以会导致服务被调用了两次。
2):服务端未做幂等性,导致重复的业务处理。

解决办法

增大配置超时时间
ribbon.ReadTimeout=10000
ribbon.ConnectTimeout=10000

附上spring Cloud 重试配置策略

eureka服务调用重试开关的配置属性:

spring.cloud.loadbalancer.retry.enabled =true

默认开启。


image.png

重试机制:对于连接超时的异常,feign都会触发重试机制,对于读取超时,会根据请求类型判断,如果是GET异常,触发重试;其他异常,不会触发重试。

ribbon.ReadTimeout=5000
ribbon.ConnectTimeout=2000

服务响应超时时间,默认5s,连接的超时时间为2s。

默认超时时间.jpg
ribbon.MaxAutoRetries=1

同一实例最大重试次数为1

ribbon.MaxAutoRetriesNextServer=2

负载均衡的其他实例的重试次数为2

ribbon.OkToRetryOnAllOperations=true

对所有操作请求都进行重试,默认false,建议不要开启。

当服务的某个节点出线故障时,在开启重试策略的情况下,ribbon负载均衡会根据上面的参数重新发起调用,重试机制确实能保证在单点故障的情况下服务能够正常使用。

但是如果因为不合理的超时时间配置或者业务处理时间比较久,超过配置的超时时间,而且服务器没有做幂等性操作,重试机制就可能带来灾难性的故障,所以要合理配置重试的参数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,145评论 6 13
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,537评论 1 92
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,916评论 0 5
  • 今天个案小非又因为近期在新跳槽的单位中遇到了难题来找我做疗愈。她感觉刚刚进入新环境还没来及适应,就要挑起很大的责任...
    小神姐阅读 252评论 0 0