Actix-redis-jobs

Simple and reliable background processing for Rust using Actix and Redis

Getting Started

To get started, just add to Cargo.toml

toml [dependencies] actix-redis-jobs = { version = "0.1" }

Prerequisites

A running redis server is required. You can quickly use docker: bash docker run --name some-redis -d redis

Usage

````rust use actix::prelude::*; use log::info; use serde::{Deserialize, Serialize}; use actixredisjobs::{Consumer, Jobs, Producer, Queue, QueueActor, MessageGuard};

[derive(Serialize, Deserialize, Debug, Message)]

[rtype(result = "Result<(), ()>")]

struct DogoJobo { dogo: String, meme: String, }

struct DogoActor;

impl Actor for DogoActor { type Context = Context; }

impl Handler> for DogoActor { type Result = ();

fn handle(&mut self, msg: Jobs<DogoJobo>, _: &mut Self::Context) -> Self::Result {
    info!("Got sweet Dogo memes to post: {:?}", msg);
    let _guarded_messages: Vec<MessageGuard<DogoJobo>> = msg.0.into_iter().map(|m| {
        MessageGuard::new(m)
    }).collect();

    // It should complain of dropping an unacked message
    // msg.ack() should do the trick
}

}

fn main() { let system = actix::System::new("test"); std::env::setvar("RUSTLOG", "info"); envlogger::init(); Arbiter::spawn(async { let actor = QueueActor::new("redis://127.0.0.1/", Queue::new("dogoapp")).await; let addr = Supervisor::start(move || actor); let paddr = addr.clone(); let dogoprocessor = DogoActor.start(); let consumerid = String::from("doggohandler1"); Supervisor::start(move || Consumer::new(addr, dogoprocessor.recipient(), consumerid)); let producer = Producer::new(paddr); let task = DogoJobo { dogo: String::from("Test Dogo Meme"), meme: String::from("https://i.imgur.com/qgpUDVH.jpeg"), }; producer.pushjob(task).await; }); let _s = system.run(); }

````

Built With

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

Authors

See also the list of contributors who participated in this project.

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Acknowledgments