In-process async task queue with concurrency control and retry
implementation com.philiprehberger:task-queueIn-process async task queue with concurrency control and retry.
implementation("com.philiprehberger:task-queue:0.2.0")
<dependency>
<groupId>com.philiprehberger</groupId>
<artifactId>task-queue</artifactId>
<version>0.2.0</version>
</dependency>
import com.philiprehberger.taskqueue.*
val queue = taskQueue<String> {
concurrency(4)
handler { task -> processTask(task) }
retry(maxAttempts = 3)
onSuccess { println("Done: $it") }
onFailure { task, err -> println("Failed: $task") }
}
queue.submit("task-1")
queue.stats() // pending, active, completed, failed
queue.submitAll(listOf("task-1", "task-2", "task-3"))
queue.submit("task-1")
queue.submit("task-2")
queue.drain() // Suspends until all tasks are processed
val queue = taskQueue<String> {
concurrency(4)
handler { processTask(it) }
retry(maxAttempts = 3, delayMs = 1000)
onDeadLetter { task, error ->
log.error("Task permanently failed: $task", error)
}
}
| Function / Class | Description |
|---|---|
taskQueue<T> { } | Build a task queue |
TaskQueue.submit(task) | Submit a task |
TaskQueue.stats() | Get queue statistics |
TaskQueue.pause() / resume() | Control processing |
TaskQueue.submitAll(tasks) | Submit multiple tasks at once |
TaskQueue.drain() | Wait for all tasks to complete |
TaskQueue.shutdown() | Shut down the queue |
onDeadLetter { } | Handle tasks that exhaust retries |
./gradlew test
./gradlew build
If you find this project useful: