oxidite-queue 2.0.1

Background job queue with cron scheduling, DLQ, and retry logic for Oxidite
Documentation

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