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

Failsafe RetryPolicy-从SupplySync引发异常

仇阳州
2023-03-14

我正在实施重试策略。基本上,我想做的是在一个单独的线程上重试POST请求。我在用杰曼的故障保护(https://github.com/jhalterman/failsafe#asynchronous-api集成)这是我的代码

Failsafe.with(retryPolicy).with(executor).future(() -> CompletableFuture.supplyAsync(() -> {
            try {
                CloseableHttpResponse response = client.execute(httpPost);
                httpPost.releaseConnection();
                client.close();
                return response;
            } catch (IOException e) {
                return null;
            }
        }).thenApplyAsync(response -> "Response: " + response)
          .thenAccept(System.out::println));

我不想抓住这里的例外。它由重试策略处理。目前不会重试,因为我在这里捕获了异常。是否有方法从“SupplySync”引发异常,以便由重试策略处理?谢谢谢谢

共有1个答案

袁河
2023-03-14

CompletionStage API提供了几种不同的处理和处理未检查异常的方法。但是在你的情况下,你得到的是一个已检查的异常,你运气不好。你要么必须处理它,要么把它扔给调用方。如果你喜欢后一种方法,这里有一种方法。

Failsafe.with(retryPolicy).with(executor).future(() -> CompletableFuture.supplyAsync(() -> {
            try {
                // Remainder omitted
                return response;
            } catch (IOException e) {
                throw new CompletionException(e);
            }
        }).thenApplyAsync(response -> "Response: " + response)
          .thenAccept(System.out::println));
 类似资料:
  • 我在写一个apk分析程序。我不能深入细节,因为这是研究材料。然而,重点在于,当我执行分析例程时,不时会得到以下消息: 这只是主要代码。我必须执行三个主要操作。为了不泄露特定信息,我把它们重新命名为A、B、C 我将这个问题标记为multithread,因为在多线程版本中也会发生同样的情况,为了调试错误,我使用此代码对该版本进行了序列化。请注意,NullPointerException位于线程主线程中

  • 这是一个windows表单应用程序,我在其中有一个特定的表单。在这个表单上,我显示了一些应该在后台异步发生的处理的进度。所有这些都很好,除了当我尝试处理后台处理中捕获的异常时…… 这是表单代码中调用Async函数的子函数,该函数位于包含所有后台处理代码的模块中: 这是它调用的异步函数,它位于一个单独的模块中: 这是由异步函数调用的常规sub: 当我使用我知道最终会在子B中生成错误的数据运行此代码时

  • 我对从JBPM工作项处理程序抛出异常并在业务流程的其他地方处理异常的主题有点困惑。我们使用JBPM 6.0.3在Jboss EAP 6.1中运行。 JBPM用户指南暗示您永远不应该从WorkItemHandler中抛出异常。相反,处理程序应该捕获它们并以某种方式处理它们,或者将它们转换为错误消息、信号或类似信息。JBPM甚至提供了工作项处理程序包装器,用于捕获信号并将它们转换为消息。用户指南中没有

  • 我为一个更大的应用程序构建了一个库/模块,它从一个函数中抛出一个异常。如果找不到文件或者文件包含错误的格式,就会抛出异常。 该方法类似于: 异常将终止我的模块,因为它将被捕获在使用我的模块的应用程序中,但没关系,因为格式不好。 我想知道的是——像这样从递归函数中抛出异常是一种不好的做法吗?

  • 给定Java8代码 java中的Lambdas看起来对错误处理不太友好...

  • 你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception):     '''A u