我厌倦了为了重试一次 HTTP 调用而引入 500KB 的代码——于是我自己写了一个。

发布日期:2026-04-24 09:20:33   浏览量 :1
发布日期:2026-04-24 09:20:33  
1

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

您的微服务调用了一个外部应用程序接口。它失败了。

您引入了 Resilience4j。现在您拥有了 10 个传递性依赖项、一个 500KB 的 JAR 包、3 个配置类,以及一个 @Bean 方法,仅仅为了实现“重试 3 次,等待 1 秒”的功能。

我曾多次遇到这样的困境。因此,我构建了 RetryKit —— 一个零依赖的 Java 17 重试与熔断器库。无需 Spring。无传递性依赖拉取。JAR 包小于 50KB。

<dependency>
  <groupId>io.github.caninaam</groupId>
  <artifactId>retrykit</artifactId>
  <version>1.0.1</version>
</dependency>

带有回退机制的固定延迟重试 —— 最常见的场景:

String result = RetryKit.<String>retry()
    .maxAttempts(3)
    .waitDuration(Duration.ofSeconds(1))
    .fallback(ctx -> "default")
    .call(() -> myService.call());

带抖动功能的指数退避 —— 用于避免在高负载下出现惊群效应:

RetryKit.<String>retry()
    .maxAttempts(4)
    .exponentialBackoff(Duration.ofMillis(500), 2.0, Duration.ofSeconds(10))
    .withJitter(0.2)
    .call(() -> myService.call());

仅针对特定异常进行重试 —— 不要重试 400 错误请求:

RetryKit.<String>retry()
    .maxAttempts(4)
    .exponentialBackoff(Duration.ofMillis(500), 2.0, Duration.ofSeconds(10))
    .withJitter(0.2)
    .call(() -> myService.call());

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部