我是靠谱客的博主 粗心黄蜂,这篇文章主要介绍feign调用的重试机制,如何关闭,现在分享给大家,希望可以做个参考。

出现场景:

非功能测试期间,配置了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调用的重试机制,如何关闭的全部内容,更多相关feign调用内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(394)

评论列表共有 0 条评论

立即
投稿
返回
顶部