simple-job-queue 0.2.0

A simple job queue
Documentation

Simple Job Queue

WIP

A dead simple (and probably very ineffecient) async job queue using Redis. Built for my own use-case, use at your own peril. Currently only supports Tokio.

Installation

cargo add simple-job-queue

Usage

use std::time::Duration;

use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use simple_job_queue::{error::JobError, redis::RedisJobQueueBackend, Job, JobQueue, Processor};

#[derive(Serialize, Deserialize)]
pub struct Data {
    field: i32,
}

pub struct DataProcessor;

#[async_trait]
impl Processor<Data> for DataProcessor {
    async fn process(&mut self, job: &Job<Data>) -> Result<(), JobError> {
        println!("{}", job.data.field);

        Ok(())
    }
}

#[tokio::main]
async fn main() {
    let backend = RedisJobQueueBackend::new(
        "redis://127.0.0.1",
        "queue_name".to_string(),
    )
    .unwrap();

    let mut queue: JobQueue<Data, RedisJobQueueBackend> = JobQueue::new(backend);
    queue.start(DataProcessor).await;

    queue.submit(Job::new(Data { field: 1 })).await.unwrap();
    queue.submit(Job::new(Data { field: 2 })).await.unwrap();
    queue.submit(Job::new(Data { field: 3 })).await.unwrap();

    tokio::time::sleep(Duration::from_secs(10)).await;
}