Crates.io | actix-redis-jobs |
lib.rs | actix-redis-jobs |
version | 0.2.0-beta.1 |
source | src |
created_at | 2020-04-25 08:17:56.151685 |
updated_at | 2021-03-22 08:43:21.552371 |
description | Simple and reliable background processing for Rust using Actix and Redis |
homepage | |
repository | https://github.com/geofmureithi/actix-jobs.git |
max_upload_size | |
id | 233875 |
size | 88,136 |
Simple and reliable background processing for Rust using Actix and Redis
To get started, just add to Cargo.toml
[dependencies]
actix-redis-jobs = { version = "0.2.0-beta.0" }
A running redis server is required. You can quickly use docker:
docker run --name some-redis -d redis
use actix::prelude::*;
use log::info;
use serde::{Deserialize, Serialize};
use futures::future::BoxFuture;
use actix_redis_jobs::{
JobContext, JobHandler, JobResult, Producer, RedisConsumer, RedisStorage, ScheduleJob,
WorkManager,
};
#[derive(Serialize, Deserialize, Message, Clone)]
#[rtype(result = "()")]
enum Math {
Sum(isize, isize),
Multiply(isize, isize),
}
impl JobHandler for Math {
fn handle(&self, _ctx: &JobContext) -> BoxFuture<JobResult> {
let fut = async move {
match self {
Math::Sum(first, second) => {
info!(
"Sum result for {} and {} is {}",
first,
second,
first + second
);
JobResult::Result(Ok(()))
}
Math::Multiply(first, second) => {
info!(
"Multiply result for {} and {} is {}",
first,
second,
first * second
);
JobResult::Result(Ok(()))
}
}
};
Box::pin(fut)
}
}
#[actix_rt::main]
async fn main() {
std::env::set_var("RUST_LOG", "info");
env_logger::init();
let storage = RedisStorage::new("redis://127.0.0.1/");
let producer = Producer::start(&storage, "math");
let sum = Math::Sum(1, 2);
let multiply = Math::Multiply(9, 8);
let scheduled = ScheduleJob::new(sum).in_minutes(1);
producer.do_send(scheduled);
producer.do_send(multiply);
WorkManager::create(move |worker| {
worker.consumer(RedisConsumer::<Math>::new(&storage, "math").workers(2))
})
.run()
.await;
}
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
We use SemVer for versioning. For the versions available, see the tags on this repository.
See also the list of contributors who participated in this project.
This project is licensed under the MIT License - see the LICENSE.md file for details