spring cloud框架中使用Feign的重试问题

背景:使用spring cloud框架,在服务A调用服务B时,使用了Feign来进行http调用;Feign使用openfeign\feign-core-10.1.0.jar

问题:服务A触发请求一次,服务B收到多次重复请求,造成数据错误

过程:

  1. 查看服务A日志,日志显示,只触发请求一次
  2. 查看服务B日志,日志显示,多条重复请求
  3. 抓包,发现服务A——>服务B过程中数据包出现多次(重试)
  4. 于是怀疑服务B处理速度慢,造成超时,Feign有重试机制
  5. 但是Feign默认不开启重试,于是查看创建Feign实例的代码,发现“Feign不开启重试”使用的是annotation形式,如下

spring cloud框架中使用Feign的重试问题_第1张图片

但是项目中创建Feign时,我们使用的是new一个实例,如下

builder方法中直接返回 new Builder();

看看Builder类:

spring cloud框架中使用Feign的重试问题_第2张图片

设置了默认的重试机制:

解决:手动设置retry为不重试,并且设置更长的超时时间(在不影响业务的情况下),并且在服务B做重复请求过滤

spring cloud框架中使用Feign的重试问题_第3张图片

你可能感兴趣的:(工作中的问题)