出现场景:
非功能测试期间,配置了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调用内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复