出现场景:

非功能测试期间,配置了feign超时时间45秒,不知道为什么有时候响应结果超时,时间大于45秒,查找具体日志发现,feign发了两次请求;

分析问题

从日志来看,既然大致确定是因为Feign导致请求重发,我们就从分析Feign的重试来着手。

百度得知:
Feign有个Retryer类来控制请求的重试,Retryer是个interface,有两个实现,一个是Retryer.Default,一个是Retryer.NEVER_RETRY。看源码我们得知,Retryer.Default是重试5次,Retryer.NEVER_RETRY是不重试,那Feign默认使用的事哪个实现呢?

feign默认是通过自己包下的Retryer进行重试配置,默认是5次

获取Retryer
在spring的项目中,所有的Bean都是通过Spring容器来管理的。先来看看从Spring管理的bean中能否获取到Retryer,获取到的Retryer是哪个。首先在注解EnableFeignClients有个注解@Import(FeignClientsRegistrar.class),它引入了FeignClientsRegistrar这个配置类
参考源码分析

解决方法:

在配置文件中增加以下配置,解决了会重发请求的问题

ribbon.MaxAutoRetries=0
ribbon.MaxAutoRetriesNextServer=0

feign调用的重试机制,如何关闭相关推荐

  1. ribbon重试机制

    我们使用Spring Cloud Ribbon实现客户端负载均衡的时候,通常都会利用@LoadBalanced来让RestTemplate具备客户端负载功能,从而实现面向服务名的接口访问. 下面的例子 ...

  2. 【Spring Cloud】OpenFeign和Spring Cloud Loadbalancer调用失败后的重试机制比较

    1 概述 搭建一个微服务系统,有两个服务,Client和Server,Server有三个实例A.B.C,我让Client调用Server,Loadbalancer负载分担默认采用轮询机制,当Serve ...

  3. springcloud-ribbon重试机制详解

    一.版本信息 springboot:2.0.5.RELEASE springcloud:Finchley.RELEASE 二.配置说明 spring-retry依赖的导入: <!--重试依赖-- ...

  4. spring feign 调用

    通用应用程序属性 可以在应用程序中指定 application.properties 中配置 配置项 默认值 描述 feign.client.config feign.client.default-c ...

  5. 一文读懂熔断器和重试机制

    导语:随着微服务的流行,熔断作为其中一项很重要的技术也广为人知.当微服务的运行质量低于某个临界值时,启动熔断机制,暂停微服务调用一段时间,以保障后端的微服务不会因为持续过负荷而宕机.本文作者介绍了熔断 ...

  6. android网络重试机制,okhttp源码解析(四):重试机制

    前言 这一篇我们分析okhttp的重试机制,一般如果网络请求失败,我们会考虑连续请求多次,增大网络请求成功的概率,那么okhttp是怎么实现这个功能的呢? 正文 首先还是回到之前的Intercepto ...

  7. Spring Retry 重试机制实现及原理

    概要 Spring实现了一套重试机制,功能简单实用.Spring Retry是从Spring Batch独立出来的一个功能,已经广泛应用于Spring Batch,Spring Integration ...

  8. 11. kafka重试机制解读

    前面对kafka的学习中已经了解到KafkaProducer通过设定参数retries,如果发送消息到broker时抛出异常,且是允许重试的异常,那么就会最大重试retries参数指定的次数. 本片文 ...

  9. okhttp源码解析(四):重试机制

    前言 这一篇我们分析okhttp的重试机制,一般如果网络请求失败,我们会考虑连续请求多次,增大网络请求成功的概率,那么okhttp是怎么实现这个功能的呢? 正文 首先还是回到之前的Intercepto ...

最新文章

  1. ionic打包/编译遇到的问题
  2. 算法笔记-链相关、链的基础、单链双链环链、链的各种功能实现、链的算法题、面试题以及算法优化方法(多)、C#
  3. vs2008生成安装部署文件的步骤
  4. DL之self-attention:self-attention自注意力机制的简介、应用之详细攻略
  5. Mathematica数据处理(11)--标签
  6. ASP.NET WEBAPI设计(文摘)
  7. Yahoo!用户体验与设计前副总裁推荐——《设计模式》
  8. 《Flume日志收集与MapReduce模式》一2.1 下载Flume
  9. 小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_34、SpringBoot整合Mybatis实操和打印SQL语句...
  10. php使用redis实例,php中使用redis队列操作实例代码
  11. VS2003远程调试
  12. 瑞星网络版数据库中 客户端IP地址如何查看?
  13. php序顶部导航,页面上下滚动改变顶部导航的定位方式
  14. Date类的getDay()和getDate()方法
  15. 卸载MySQL及彻底清理MySQL的卸载残留
  16. MaxCompute实践之路(三) -- Java对接MaxCompute
  17. python dataframe如何设置并处理(删除、填充)空值
  18. 咕咕机三代变萌后,到底有多好玩
  19. 重启网卡提示Bringing up interface eth0:
  20. IDEA新推出的优雅美观字体初体验(赏心悦目)——JetBrainsMono

热门文章

  1. 区块链开发者招聘:IOST开发者计划
  2. 关于SCSI/SATA/IDE硬盘的比较
  3. 部门刚刚来了个测试开发,听说是00后,上来一顿操作给我看呆了...
  4. Nacos 与其他注册中心对比
  5. live555源代码概述
  6. Ajax(jQuery封装),表单form提交(Ajax),art-template模板引擎,原生Ajax,XML和JSON,axios,跨域和JSONP,防抖和节流,HTTP协议
  7. 可定制的小程序组件库:Wux Weapp
  8. Python----关键字in , 计算序列的函数
  9. YTU 3090 团体操排序
  10. 谁说程序员不懂浪漫?用Python每天自动给女朋友免费发短信