3 releases (stable)
| 2.0.1 | Jan 25, 2026 |
|---|---|
| 2.0.0 | Jan 21, 2026 |
| 0.1.0 | Dec 7, 2025 |
#2091 in Asynchronous
Used in 2 crates
36KB
792 lines
oxidite-queue
Background job queue with cron scheduling, DLQ, and retry logic.
Installation
[dependencies]
oxidite-queue = "0.1"
Usage
Define a Job
use oxidite_queue::*;
use async_trait::async_trait;
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct SendEmailJob {
to: String,
subject: String,
body: String,
}
#[async_trait]
impl Job for SendEmailJob {
async fn perform(&self) -> JobResult {
// Send email logic
send_email(&self.to, &self.subject, &self.body).await?;
Ok(())
}
fn max_retries(&self) -> u32 {
3
}
}
Enqueue Jobs
// Create queue
let queue = Queue::memory();
// Enqueue job
let job = JobWrapper::new(&SendEmailJob {
to: "user@example.com".into(),
subject: "Welcome!".into(),
body: "Thanks for signing up!".into(),
})?;
queue.enqueue(job).await?;
Cron Jobs
// Recurring job (runs daily at 9 AM)
let job = JobWrapper::new(&DailyReportJob {})?
.with_cron("0 0 9 * * *".to_string());
queue.enqueue(job).await?;
Worker
// Start worker
let worker = Worker::new(Arc::new(queue))
.worker_count(4);
worker.start().await;
Dead Letter Queue
// List failed jobs
let failed = queue.list_dead_letter().await?;
// Retry from DLQ
queue.retry_from_dead_letter(&job_id).await?;
Statistics
let stats = queue.get_stats().await;
println!("Processed: {}", stats.total_processed);
println!("Failed: {}", stats.total_failed);
Features
- Memory and Redis backends
- Cron job scheduling
- Retry logic with exponential backoff
- Dead letter queue
- Job statistics tracking
- Worker pool management
- Job priorities
- Delayed jobs
License
MIT
Dependencies
~45–63MB
~1M SLoC