oxidite-queue

Crates.iooxidite-queue
lib.rsoxidite-queue
version2.0.1
created_at2025-12-07 13:13:55.996237+00
updated_at2026-01-25 01:44:51.638922+00
descriptionBackground job queue with cron scheduling, DLQ, and retry logic for Oxidite
homepage
repositoryhttps://github.com/meshackbahati/rust-oxidite
max_upload_size
id1971577
size91,879
Meshack Bahati Ouma (meshackbahati)

documentation

README

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

Commit count: 42

cargo fmt