关键变量

  1. BackOffPolicy 执行失败处理
  2. RetryPolicy 判断能否重试
  3. RetryListener 执行监听

执行方法 execute

参数

  1. retryCallback 执行方法
  2. recoveryCallback 重试上限后执行方法

执行步骤

  1. RetryPolicy.open 创建RetryContext
  2. RetrySynchronizationManager.register(context) 当前线程存储RetryContext
  3. doOpenInterceptors 遍历执行 RetryListener.open
  4. 判断 backOffContext 是否在context里面,FALSE:执行backOffPolicy.start

必须抛出异常才能进入重试

  1. retryPolicy.canRetry && !context.isExhaustedOnly(判断执行是否结束)

进入异常处理

  1. registerThrowable 放入异常
  2. doOnErrorInterceptors 遍历执行 RetryListener.onError
  3. 判断一次步骤 5
  4. backOffPolicy.backOff 执行,进行sleep等操作
  5. shouldRethrow 执行,state 非空则执行回滚,并抛出异常

重试超过限制,退出while

  1. handleRetryExhausted 执行,recoveryCallback.recover

finally

  1. retryPolicy.close
  2. RetryListener.close
  3. RetrySynchronizationManager.clear 清理当前线程存储RetryContext