Fast‑Retry: High‑Performance Asynchronous Multi‑Task Retry Framework for Java

Fast‑Retry is a high‑performance Java library that enables asynchronous, multi‑task retry with customizable logic, offering a scalable alternative to synchronous retry frameworks like Spring‑Retry and Guava‑Retry for handling massive workloads such as millions of user identity queries.

Java Architect Essentials
Java Architect Essentials
Java Architect Essentials
Fast‑Retry: High‑Performance Asynchronous Multi‑Task Retry Framework for Java

Preface

When a system needs to poll and retry identity information for millions of users, traditional synchronous retry frameworks such as Spring‑Retry or Guava‑Retry become impractical, even with abundant threads; Fast‑Retry was created to solve this problem.

Fast‑Retry Overview

Fast‑Retry is a high‑performance, multi‑task retry framework that supports millions of asynchronous retry tasks and offers both programmatic and annotation‑based usage, as well as custom result‑based retry logic.

What Is This?

Unlike mainstream single‑task synchronous retry frameworks, Fast‑Retry provides asynchronous retry, timeout waiting, and callbacks, allowing massive parallel retries without exhausting thread resources.

Performance tests with an 8‑thread pool and a task that retries five times with a 2‑second interval show that Fast‑Retry outperforms Spring‑Retry and Guava‑Retry even when they handle only 50 tasks, demonstrating exponential throughput gains.

Quick Start

Add Dependency

<dependency>
    <groupId>io.github.burukeyou</groupId>
    <artifactId>fast-retry-all</artifactId>
    <version>0.2.0</version>
</dependency>

There are three ways to build a retry task.

Using RetryQueue

RetryTask

lets you configure retry logic such as intervals, conditions, and result handling. For simple cases, prefer FastRetryBuilder or the @FastRetry annotation. RetryQueue is the core executor, similar to a thread‑pool API.

ExecutorService executorService = Executors.newFixedThreadPool(8);
RetryQueue queue = new FastRetryQueue(executorService);
RetryTask<String> task = new RetryTask<String>() {
    int result = 0;
    @Override
    public long waitRetryTime() { return 2000; }
    @Override
    public boolean retry() { return ++result < 5; }
    @Override
    public String getResult() { return result + ""; }
};
CompletableFuture<String> future = queue.submit(task);
log.info("任务结束 结果:{}", future.get());

Using FastRetryBuilder

The builder internally uses RetryQueue but simplifies the construction of RetryTask.

RetryResultPolicy<String> resultPolicy = result -> result.equals("444");
FastRetryer<String> retryer = FastRetryBuilder.<String>builder()
        .attemptMaxTimes(3)
        .waitRetryTime(3, TimeUnit.SECONDS)
        .retryIfException(true)
        .retryIfExceptionOfType(TimeoutException.class)
        .exceptionRecover(true)
        .resultPolicy(resultPolicy)
        .build();

CompletableFuture<String> future = retryer.submit(() -> {
    log.info("重试");
    if (0 < 10) {
        throw new TimeoutException("test");
    }
    return "444";
});
String o = future.get();
log.info("结果{}", o);

Using @FastRetry Annotation

The annotation also relies on RetryQueue and integrates with Spring; enable it with @EnableFastRetry.

@FastRetry(retryWait = @RetryWait(delay = 2))
public String retryTask() {
    return "success";
}

When the method returns a CompletableFuture, the framework automatically handles asynchronous polling.

@FastRetry(retryWait = @RetryWait(delay = 2))
public CompletableFuture<String> retryTask() {
    return CompletableFuture.completedFuture("success");
}

Custom Retry Annotation

You can define your own annotation, mark it with @FastRetry, and implement AnnotationRetryTaskFactory to provide custom task construction logic; the default implementation is FastRetryAnnotationRetryTaskFactory.

Usage Recommendations

Regardless of the construction method, prefer asynchronous retry returning CompletableFuture and use its whenComplete method to handle results.

Other

GitHub project : https://github.com/burukeYou/fast-retry

Maven repository : https://central.sonatype.com/artifact/io.github.burukeyou/fast-retry-all

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

JavaspringRetryfast-retry
Java Architect Essentials
Written by

Java Architect Essentials

Committed to sharing quality articles and tutorials to help Java programmers progress from junior to mid-level to senior architect. We curate high-quality learning resources, interview questions, videos, and projects from across the internet to help you systematically improve your Java architecture skills. Follow and reply '1024' to get Java programming resources. Learn together, grow together.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.