重试机制

自动配置类中
image.png
点进去看DefaultLoadBalancerRetryHandler
image.png
点进去看clientConfig.get方法
image.png
可以看到如果没有配置,取默认值false,配置了就取配置的值。
那既然这个参数是false,为什么ribbon还有默认重试一次的说法呢
image.png
我们可以看到在ribbon的重试策略中还有一个canRetry的方法,这个方法判断是否可以重试。
两个判断条件,一个是get请求直接就可以重试。另一个我们看一下
image.pngimage.png
另一个的默认值是在DefaultClientConfigImpl的静态代码块中初始化的默认是false。
那么我们可不可以配置全部的方法都进行重试呢?当然是可以的。就在前面图的clientConfig.get方法
取我们配置的值。如果配置为true,就可以所有请求都重试,但是这个会有风险,不建议这样做。
如果我们不想用默认的重试策略也可以自己实现RetryHandler接口的类注入到spring中。
image.png

当然请求重试也有限制,限制就是我们配置的重试次数。
image.png
image.png
排除了首次调用,再判断配置和是否能重试的canRetry方法。

附上配置文件的配置
image.png
这提醒我们,不清楚配置的原理不要瞎配。