故障保护“运行”方法的机制

时间:2019-06-05 06:57:27

标签: java exception retry-logic

我正在使用Failsafehttps://github.com/jhalterman/failsafe)作为重试逻辑框架,并想进一步了解故障保护的“运行”方法如何工作。

假设我有

void MyCurrentFunction(parameter) {
    Failsafe.with(MY_RETRY_POLICY)
            .run(() -> runJob(parameter));
    OtherFunction1();
}

然后,当MyCurrentFunction运行时,Failsafe.run会阻止MyCurrentFunction的执行吗?换句话说,OtherFunction1会在所有重试完成之前执行吗?

1 个答案:

答案 0 :(得分:0)

这是检查您问题的代码(注意:该代码与Failsafe 2.0相关)

ViewGroup

答案是forEach不会在所有重试完成之前执行。
实际上,如果所有重试失败,View将永远不会被调用。

这是测试代码的输出

private RetryPolicy<Object> MY_RETRY_POLICY = new RetryPolicy<>()
        .handle(RuntimeException.class)
        .withMaxRetries(3);

private void myCurrentFunction() {
    Failsafe.with(MY_RETRY_POLICY)
            .run(() -> runJob());

    otherFunction1();
}

private void otherFunction1() {
    System.out.println("OtherFunction1");
}

private void runJob() {
    System.out.println("run job...");

    throw new RuntimeException("Exception");
}

仍然,您可以修改重试策略以执行OtherFunction1
1)每次重试之后

OtherFunction1

2)重试失败后

run job...
run job...
run job...
run job...

java.lang.RuntimeException: Exception