Skip to content

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
}

贡献者

页面历史

Released under the MIT License.