前言:一直不清楚ribbon的重试和feign的重试关系,由于网上用的cloud版本都不一样,没个明确的说明。我这里记录一下。有不妥的地方,欢迎指正。
SpringCloud的版本:
Greenwich.RELEASE
SpringBoot的版本:
2.1.13.RELEASE
我用的这个版本,feign的重试是默认关闭的,它直接用的是ribbon的重试机制,ribbon的重试机制也是默认开启的,详见源码:
可以看到,feign这是默认关闭了。
可以看到,我们进行服务负载调用的时候,重试机制,这是默认开启的。
下面是ribbon的重试配置,供参考:
#ribbon全局配置
ribbon:
# 同一实例最大重试次数,不包括首次调用。默认值为0,请求某服务6s超时后准备重试,该重试策略会先尝试再访问该实例,如果失败1次之后才更换实例访问。
MaxAutoRetries: 1
# 同一个微服务其他实例的最大重试次数,不包括第一次调用的实例。默认值为1
MaxAutoRetriesNextServer: 1
# 是否所有操作(GET、POST等)都允许重试。默认值为false,设置为true会有接口幂等的情况,这个看情况进行设置
# 默认false,设定为false的话,只有get请求会重试。默认的话get请求会重试1次
OkToRetryOnAllOperations: false
#负载均衡超时时间,默认值5000
ReadTimeout: 6000
#ribbon请求连接的超时时间,默认值2000
ConnectTimeout: 6000
然后,我这里有个疑问,如果,我业务中想用spring的retry重试机制,我引入了pom配置。
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
那么feign的重试机制,会自动开启么。如果开启了,服务调用的重试会和ribbon的重试机制一起使用,还是继续走的是ribbon的重试机制。希望有人解答一下。