oxidite-queue 0.1.0

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

```toml
[dependencies]
oxidite-queue = "0.1"
```

## Usage

### Define a Job

```rust
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

```rust
// 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

```rust
// Recurring job (runs daily at 9 AM)
let job = JobWrapper::new(&DailyReportJob {})?
    .with_cron("0 0 9 * * *".to_string());

queue.enqueue(job).await?;
```

### Worker

```rust
// Start worker
let worker = Worker::new(Arc::new(queue))
    .worker_count(4);

worker.start().await;
```

### Dead Letter Queue

```rust
// List failed jobs
let failed = queue.list_dead_letter().await?;

// Retry from DLQ
queue.retry_from_dead_letter(&job_id).await?;
```

### Statistics

```rust
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