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

故障保护不必要地否定数据缓冲例外

权浩阔
2023-03-14

我目前正在创建一个重试机制,用于使用故障保护库执行请求。

问题是:我定义的RetryPolicy包含几个与超时相关的异常,但是当我使用failsafe库(failsafe.with(someFallback,somePolicy))时。得到(()-

现在我明白了,FailsafeExecutor(…)。get()。然而,我仍然很好奇我是否做错了什么,我是否可以做些什么来解决这个问题。

下面是我的代码的简化版本:

public Response performRequest() {

        RetryPolicy<Object> retryPolicy = RetryPolicy.builder()
                .withDelay(Duration.ofMillis(60_000L))
                .handle(exceptionA, exceptionB, ...)
                .withMaxRetries(3)
                .onSuccess(o -> log.info("someRandomMessage"))
                .onFailure(o -> log.warn("someRandomWarnMessage"))
                .onRetriesExceeded(o -> log.error("someRandomErrorMessage"))
                .build();

        Fallback<Object> fallback = Fallback.of(event -> {
                Throwable rootException = ExceptionUtils.getRootCause(event.getLastException());
                if (rootException instanceof TimeoutException || rootException instanceof ConnectException) {
                    throw new someRandomException(rootException.getMessage());
                }
            }
        );

        Response response Failsafe.with(fallback, retryPolicy).get(() -> someRequest);
        return response;

使用此代码执行的场景:

我们执行一个请求,(在测试期间)我们希望看到一个未检查的异常。然而,这个异常被故障安全库的功能“吞噬”,而我实际上希望看到这个异常。我知道这更多的是在我这边,但我不确定如何解决这个问题。非常感谢任何提示、替代或更正。


共有1个答案

顾宏朗
2023-03-14

发现了自己的错误:如果不触发if语句,则不会抛出异常并返回null。这导致了空响应等。

 类似资料:
  • 我正在运行spring boot,KafkaListener是我的客户。问题是我们如何从失败的kafka配置中恢复,并避免应用程序在退出代码为0的过程结束时停止。例如,不正确的配置可能是不正确的endpointurl。如果无法访问Kafka服务器,也会出现同样的情况。因此,在任何情况下,KafkaListner进程都不应该杀死服务器。 ontext.java:895应用程序上下文异常:未能启动be

  • 在我的项目中,我创建了以下目录结构 在我的pom.xml我做了以下记录 如果我复制src中的资源- 如何使联调也将资源中的文件复制到目标中?

  • 我在张量流中使用keras创建了一个自定义模型。我使用的版本是tensorflow nightly 1.13.1。我使用官方工具构建了tensorfflow lite模型(方法tf.lite.TFLiteConverter.from_keras_model_file)。 创建模型后,我查看了输入形状,似乎没有什么不好。 tensorflow lite模型中的输入和输出形状为: 您可以注意到输入形状

  • 当试图将故障保险绑定到生命周期时,根本不会执行任何操作。我已经阅读了这篇指南和这个相关的问题,根据这些信息,当我在pom.xml的构建/pluginManagement/plugins-部分中指定它时,应该可以让maven在中执行故障安全的目标: 不幸的是,这并没有强制maven运行故障安全:集成测试(既没有mvn集成测试也没有mvn验证) 但是,如果我尝试将failsafe与以下插件规范一起使用

  • 我在一个项目中混合了单元测试框架(用于surefire maven插件):JUnit TestNG(几乎所有测试都是JUnit测试,但TestNG包含在两个测试所需的反应流TCK框架中。所有集成测试(故障保护)都只是JUnit测试。我成功地将surefire配置为使用以下插件配置运行两个测试:JUnit和TestNG: 当我运行

  • 我想使用maven-故障安全插件来运行一些集成测试。如果任何测试失败,我希望Maven构建失败而不是构建成功。 我如何配置它,构建不成功是什么? 我的故障保护插件配置为: