0.2.0-beta.1 |
|
---|---|
0.1.1 |
|
0.1.0 |
|
#73 in #background
51KB
1K SLoC
Actix-redis-jobs
使用 Actix 和 Redis 为 Rust 实现简单且可靠的背景处理
入门指南
要开始,只需将其添加到 Cargo.toml
[dependencies]
actix-redis-jobs = { version = "0.2.0-beta.0" }
先决条件
需要运行中的 redis 服务器。您可以使用 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;
}
构建工具
贡献
请阅读 CONTRIBUTING.md 了解我们的行为准则和向我们提交拉取请求的过程。
版本控制
我们使用 SemVer 进行版本控制。有关可用版本,请参阅此存储库的 标签。
作者
- Njuguna Mureithi - 初始工作 - Njuguna Mureithi
请参阅参与此项目的 贡献者列表。
许可
本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE.md 文件
致谢
- 灵感:本项目灵感来源于 Curlyq,该程序用 GoLang 编写
依赖项
~16–32MB
~477K SLoC