spring cloud框架中使用Feign的重试问题
背景:使用spring cloud框架,在服务A调用服务B时,使用了Feign来进行http调用;Feign使用openfeign\feign-core-10.1.0.jar
问题:服务A触发请求一次,服务B收到多次重复请求,造成数据错误
过程:
- 查看服务A日志,日志显示,只触发请求一次
- 查看服务B日志,日志显示,多条重复请求
- 抓包,发现服务A——>服务B过程中数据包出现多次(重试)
- 于是怀疑服务B处理速度慢,造成超时,Feign有重试机制
- 但是Feign默认不开启重试,于是查看创建Feign实例的代码,发现“Feign不开启重试”使用的是annotation形式,如下
但是项目中创建Feign时,我们使用的是new一个实例,如下
builder方法中直接返回 new Builder();
看看Builder类:
设置了默认的重试机制:
解决:手动设置retry为不重试,并且设置更长的超时时间(在不影响业务的情况下),并且在服务B做重复请求过滤