#actix #redis #jobs #background #async

已删除 actix-redis-jobs

使用 Actix 和 Redis 为 Rust 实现简单且可靠的背景处理

0.2.0-beta.1 2021 年 3 月 22 日
0.1.1 2020 年 4 月 25 日
0.1.0 2020 年 4 月 25 日

#73 in #background

MIT/Apache

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 进行版本控制。有关可用版本,请参阅此存储库的 标签

作者

请参阅参与此项目的 贡献者列表

许可

本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE.md 文件

致谢

  • 灵感:本项目灵感来源于 Curlyq,该程序用 GoLang 编写

依赖项

~16–32MB
~477K SLoC