前言
Spring Cloud中的Feign和Ribbon通常都是协同工作,Feign和Ribbon中都存在重试机制,那么他们的重试机制是如何进行协同工作的呢?
Feign的重试机制
feign的重试机制的实现类是Retryer,他的核心参数含义如下:
maxAttempts-最大尝试次数,默认值为5,首次请求也算一次,请求1次,重试4次。
period;-初始时间,用于参与计算线程休眠时间。
maxPeriod;-线程休眠的单次最大时间上限。
attempt;-尝试次数,每次尝试+1。
sleptForMillis;-线程累计休眠总时间。
Retryer定义
核心的重试代码如下:
@Override
public Object invoke(Object[] argv) throws Throwable {
RequestTemplate template = buildTemplateFromArgs.create(argv);
Options options = findOptions(argv);
Retryer retryer = this.retryer.clone();
while (true) {//这是一个循环操作
try {
return executeAndDecode(template, options); //执行请求 逻辑