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

在Spring中调优RetryPolicy-基于HttpStatus状态代码的重试?[副本]

乔俊才
2023-03-14

是否可以根据错误状态代码在spring重试中设置RetryPolicy?例如,我不想在HttpStatus.bad_request状态代码为400的HttpClientErrorException上重试。因此,它应该忽略所有其他错误代码--4xx。

我使用Spring Integration http outboundGateway来调用服务器。

现在,在我的RequestHandlerRetryAdvice中,我正在将我的重试建议配置为

SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy(4, Collections.singletonMap(HttpClientErrorException.class, false));

共有1个答案

东门胤
2023-03-14

我认为必须扩展SimpleRetryPolicy以重写以下行为:

public boolean canRetry(RetryContext context)

该方法委托BinaryExceptionClassifier来决定给定异常是否可重试。该分类器根据异常类型做出决策:

根据对象与提供的类型的继承关系对对象进行分类。如果要分类的对象是提供的类型之一,或者是类型之一的子类,则返回非默认值

@Override
public boolean canRetry(RetryContext context) {
    Throwable t = context.getLastThrowable();
    if (HttpStatusCodeException.class.isAssignableFrom(t.getClass())) {
        HttpStatusCodeException httpStatusCodeException = (HttpStatusCodeException) t;
        if (httpStatusCodeException.getStatusCode() == HttpStatus.BAD_REQUEST) { 
            return false;   
        }
    }
    return super.canRetry(context);
}
 类似资料:
  • 是否可以根据错误状态代码在spring retry(https://github.com/spring-projects/spring-retry)中设置RetryPolicy?例如,我想用重试状态代码503。因此,它应该忽略所有其他错误代码--[500-502]和[504-511]。

  • 我正在执行一个批处理调用,其中批处理API的总体响应是成功的,但批处理的一些调用可能是失败的,因此事件如果REST模板提供成功的响应,我希望解析响应,如果在解析时发现错误状态代码,我希望再次重试整个批处理调用。问题是spring重试没有从REST模板中检测到任何异常,所以它没有进行重试。 ResponseEntity响应=restTemplate.exchange(requestEntity,st

  • 问题内容: 在处理特定网站时,有时会收到状态码为403的http响应。在这种情况下,我想重新执行该请求(因为在我的特定情况下,该服务器实际上超载时会抛出403)。我曾尝试将a 和a 一起使用,但是它没有按我希望的方式工作;我希望在中引发异常会触发,但事实并非如此。如何获得所需的功能? 这是说明我的情况的示例代码: 问题答案: 尝试使用自定义

  • 前言 代码测试 测试程序的运行时间 time 函数调用关系图 calltree 性能测试工具 gprof & kprof 代码覆盖率测试 gcov & ggcov 内存访问越界 catchsegv, libSegFault.so 缓冲区溢出 libsafe.so 内存泄露 Memwatch, Valgrind, mtrace 代码调试 静态调试:printf + gcc -D(打印程序中的变量)

  • 了解如何在 Dreamweaver 中清除代码、检查浏览器兼容性、验证 XML 文档并使页面符合 XHTML 规范。 清理代码 您可以自动删除空标签,合并嵌套 font 标签,以及通过其它方法改善杂乱或难以辨识的 HTML 或 XHTML 代码。 有关如何清理从 Microsoft Word 文档生成的 HTML 的信息,请参阅打开和编辑现有文档。 在打开的文档中,选择“工具”>“清理 HTML”

  • 我希望为每个状态代码显示不同的错误消息,例如: < li>400错误请求 < li>403禁止 < li>500内部服务器错误 < li>404未找到 < li>401未授权 如何在新的ASP。NETMVC6应用程序?我可以使用内置的UseErrorHandler方法执行此操作吗? 另外,我注意到,即使使用上述处理程序,输入不存在的URL(例如/this-page-不存在)也会导致来自IIS的丑陋