Attempt 属性
概述
Attempt
直译为重试,可以把它理解为每一次重试调用的上下文,通过它可以获取当前执行的元数据,甚至可以进行重试取消处理。目前可以通过监听器或者非检查类型的异常实例ChanceException
来获取当前的Attempt
实例。
Attempt 方法集合
Attempt
提供的方法如下:
state()
:当前重试的状态,返回值类型是枚举Attempt.State
Attempt.State.RUNNING
:表示当前重试正在执行中Attempt.State.SUCCESS
:表示当前重试是成功的,可以获取结果Attempt.State.FAILED
:表示当前重试是失败的,可以获取具体的异常实例Attempt.State.CANCELLED
:表示当前重试被取消
cancel()
与forceCancel()
:取消或者强制取消当前正在执行的重试resultNow()
:获取结果exceptionNow()
:获取异常rootCauseNow()
:递归获取根异常attemptTimes()
:获取当前的重试次数(也就是第N
次重试的这个N
的值)initialNanos()
:整个调用的初始化时间startNanos()
:当前重试的开始时间completionNanos()
:当前重试的完成时间hasResult()
、hasException()
和isCancelled()
:都是state()
的衍生方法
获取当前的 Attempt
方式一:通过监听器获取Attempt
:
java
Chance<String> chance = Chance.<String, Throwable>newBuilder()
.withNeverRetry()
.withListener(attempt -> {
// access current attempt
})
.build();
方式二:重试最终异常情况下通过ChanceException
获取Attempt
:
java
Chance<String> chance = Chance.<String, Throwable>newBuilder()
.withNeverRetry()
.build();
try {
chance.call(() -> realCall());
} catch (ChanceException ce) {
Attempt<?, ?> lastFailedAttempt = ce.getAttempt();
// access current attempt
}