springcloud openfeign默认使用Retryer.NEVER 不重试
解决方案
edu中配置ribbon的超时时间(因为OpenFeing的底层即是对ribbon的封装)
#超时配置
#值小了容易失败,值大了可能会导致服务雪崩
ribbon:
ConnectTimeout: 10000 #连接建立的超时时长,默认1秒
ReadTimeout: 10000 #处理请求的超时时间,默认为1秒
重置机制:2.0.x之前feign远程访问如果失败,默认会重试若干次,如果有一次成功则返回成功;
带来的问题:
- 等待时间长
- 出现幂等性问题:相同的多次请求提交,后端处理的结果始终一致
解决:
A->B 同一个请求提交多次(防止表单重复提交)
B需要解决幂等性问题
A提交请求时携带一个唯一的字符串,B进行校验
以前的版本:openfeign默认使用 Retryer.DEFAULT 重试5次,会导致(幂等性失败的问题: 两端结果一致性,以后还会整合token解决)
ribbon:
MaxAutoRetries: 0 # 同一实例最大重试次数,不包括首次调用,默认0
MaxAutoRetriesNextServer: 1 # 重试其他实例的最大重试次数,不包括首次所选的server,默认1