42 个版本

0.5.5 2023年9月25日
0.5.3 2023年2月28日
0.4.0-rcn.112021年10月7日
0.4.0-rc52020年11月19日
0.2.5 2020年3月24日

#68异步

Download history 840/week @ 2024-04-27 749/week @ 2024-05-04 1296/week @ 2024-05-11 1306/week @ 2024-05-18 1059/week @ 2024-05-25 987/week @ 2024-06-01 1200/week @ 2024-06-08 1238/week @ 2024-06-15 998/week @ 2024-06-22 1183/week @ 2024-06-29 1402/week @ 2024-07-06 1255/week @ 2024-07-13 1306/week @ 2024-07-20 1264/week @ 2024-07-27 1317/week @ 2024-08-03 1049/week @ 2024-08-10

5,066 每月下载量
tourniquet-celery 中使用

Apache-2.0

1MB
5.5K SLoC




用于生产和使用分布式消息队列的异步任务的 Celery 的 Rust 实现。


Build License Crates Docs Help wanted


我们欢迎任何水平的 Rust 体验者做出贡献。对于完全新手,请参阅 HACKING_QUICKSTART.md

如果您已经熟悉 Rust 的基础知识但对 Celery 新手,请查看 Rusty Celery 书籍 或原始的 Python Celery 项目

快速入门

通过装饰函数使用 task 属性来定义任务。

use celery::prelude::*;

#[celery::task]
fn add(x: i32, y: i32) -> TaskResult<i32> {
    Ok(x + y)
}

使用 app 宏创建一个应用,并将其与您的任务注册

let my_app = celery::app!(
    broker = AMQPBroker { std::env::var("AMQP_ADDR").unwrap() },
    tasks = [add],
    task_routes = [
        "*" => "celery",
    ],
).await?;

然后通过以下方式将任务发送到队列

my_app.send_task(add::new(1, 2)).await?;

然后通过以下方式从队列中消费任务作为工作进程

my_app.consume().await?;

示例

examples/ 目录包含

先决条件

如果您已经有一个正在运行的AMQP代理,您可以设置环境变量AMQP_ADDR为您代理的URL(例如,amqp://localhost:5672//,其中末尾第二个斜杠是默认虚拟主机default vhost的名称)。否则,只需运行辅助脚本。

./scripts/brokers/amqp.sh

这将下载并运行官方的RabbitMQ镜像(RabbitMQ是一个流行的AMQP代理)。

运行示例

运行Rust Celery应用

您可以使用以下方式消费任务:

cargo run --example celery_app consume

并且您可以使用以下方式生产任务:

cargo run --example celery_app produce [task_name]

此示例支持的任务有:addbuggy_tasklong_running_taskbound_task

运行Python Celery应用

类似地,您可以通过运行以下命令从Python消费或生产任务:

python examples/celery_app.py consume [task_name]

python examples/celery_app.py produce

您需要安装Python 3,以及requirements.txt文件中列出的要求。您还必须提供任务名称。此示例实现了4个任务:addbuggy_tasklong_running_taskbound_task

运行Rust Beat应用

您可以使用以下命令启动Rust beat:

cargo run --example beat_app

然后您可以根据上述说明从Rust或Python消费任务。

路线图和当前状态

✅ = 支持且基本稳定,尽管可能有一些不完整的功能。
⚠️ = 部分实现且正在积极开发中。
🔴 = 尚不支持但即将实现。

核心

状态 跟踪
协议 ⚠️
生产者
消费者
代理
Beat
后端 🔴
篮子 🔴

代理

状态 跟踪
AMQP
Redis

后端

状态 跟踪
RPC 🔴
Redis 🔴

依赖

~17–31MB
~508K SLoC