当前位置: 首页 > 知识库问答 >
问题:

故障安全"运行"方法的机理

费子濯
2023-03-14

我正在使用故障保护(https://github.com/jhalterman/failsafe)作为我的重试逻辑框架,我想更多地了解故障保护的“运行”方法是如何工作的。

假设我有:

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

那么当MyMONt款额运行时,Failsafe.run是否会阻止MyMONt款额的执行?换句话说,是否会在所有重试完成之前执行其他函数1

共有1个答案

卞博简
2023-03-14

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

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");
}

答案是否定的<代码>其他功能1在所有重试完成之前不会执行
实际上,如果所有重试都失败,OtherFunction1将永远不会被调用。

下面是测试代码的输出

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

java.lang.RuntimeException: Exception

不过,您仍然可以修改重试策略,以便在每次重试后执行其他功能1
1)

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

2)重试失败后

private RetryPolicy<Object> MY_RETRY_POLICY = new RetryPolicy<>()
        .handle(RuntimeException.class)
        .onFailure(fail -> otherFunction1())
        .withMaxRetries(3);
 类似资料:
  • YAML模式被定义为一组标签的组合,并包括用于解析非特定标签的机制。 YAML中的故障安全模式以这样的方式创建,即它可以与任何YAML文档一起使用。 它也被视为通用YAML文档的推荐架构。 类型 故障安全模式有两种类型:通用映射和通用序列。 通用映射 它代表一个关联容器。 这里,每个键在关联中是唯一的,并且映射到恰好一个值。 YAML对键定义没有任何限制。 下面给出了表示通用映射的示例 - JSO

  • 本文向大家介绍Java中故障快速和故障安全之间的区别,包括了Java中故障快速和故障安全之间的区别的使用技巧和注意事项,需要的朋友参考一下 序号 键 不及格 故障安全 1 例外 集合中的任何更改(例如在线程期间添加,删除和更新集合)都是迭代集合,然后使快速抛出并发修改异常失败。  故障安全集合不会引发异常。  2。 集合类型 ArrayList和hashmap集合是快速失败迭代器的示例  Copy

  • 我加载的证书对“每个人”都有完全的特权。我已经尝试了我在互联网上看到的每一个解决方案,但仍然得到错误。 下面是我创建请求的代码: 获取证书的代码(我也尝试过使用pfx): 第二个编辑:我可以让它在SoapUI中工作,但不能在。NET应用程序中工作,只需从SOAP UI中的文件系统中加载SSL证书即可。

  • 有人知道这个错误是怎么回事吗??

  • 问题内容: Java中有两种迭代器:故障安全和故障快速。 这是什么意思,它们之间的区别是什么? 问题答案: 他们之间有什么区别… “故障安全”(在工程中)表示某些故障不会造成或只造成最小的损坏。严格地说,有 没有这样的事情 在Java中的故障安全迭代器。如果迭代器失败(通常为“失败”),则可能会发生损坏。 我怀疑您实际上是在说“弱一致性”迭代器。Javadoc说: “大多数并发Collection

  • 本文档介绍 DM 的错误系统及常见故障的处理方法。 DM 错误系统 在 DM 的错误系统中,对于一条特定的错误,通常主要包含以下信息: code:错误码。 同一种错误都使用相同的错误码。错误码不随 DM 版本改变。 在 DM 迭代过程中,部分错误可能会被移除,但错误码不会。新增的错误会使用新的错误码,不会复用已有的错误码。 class:发生错误的类别。 用于标记出现错误的系统子模块。 下表展示所有