42 个版本
0.5.5 | 2023年9月25日 |
---|---|
0.5.3 | 2023年2月28日 |
0.4.0-rcn.11 | 2021年10月7日 |
0.4.0-rc5 | 2020年11月19日 |
0.2.5 | 2020年3月24日 |
#68 在 异步 中
5,066 每月下载量
在 tourniquet-celery 中使用
1MB
5.5K SLoC
用于生产和使用分布式消息队列的异步任务的 Celery 的 Rust 实现。
我们欢迎任何水平的 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 代理实现的简单 Celery 应用(
examples/celery_app.rs
), - 相同的 Celery 应用使用 Python 实现(
examples/celery_app.py
), - 以及使用 Rust 实现的 Beat 应用(
examples/beat_app.rs
)。
先决条件
如果您已经有一个正在运行的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]
此示例支持的任务有:add
、buggy_task
、long_running_task
和bound_task
运行Python Celery应用
类似地,您可以通过运行以下命令从Python消费或生产任务:
python examples/celery_app.py consume [task_name]
或
python examples/celery_app.py produce
您需要安装Python 3,以及requirements.txt
文件中列出的要求。您还必须提供任务名称。此示例实现了4个任务:add
、buggy_task
、long_running_task
和bound_task
运行Rust Beat应用
您可以使用以下命令启动Rust beat:
cargo run --example beat_app
然后您可以根据上述说明从Rust或Python消费任务。
路线图和当前状态
✅ = 支持且基本稳定,尽管可能有一些不完整的功能。
⚠️ = 部分实现且正在积极开发中。
🔴 = 尚不支持但即将实现。
核心
状态 | 跟踪 | |
---|---|---|
协议 | ⚠️ | |
生产者 | ✅ | |
消费者 | ✅ | |
代理 | ✅ | |
Beat | ✅ | |
后端 | 🔴 | |
篮子 | 🔴 |
代理
状态 | 跟踪 | |
---|---|---|
AMQP | ✅ | |
Redis | ✅ |
后端
状态 | 跟踪 | |
---|---|---|
RPC | 🔴 | |
Redis | 🔴 |
依赖
~17–31MB
~508K SLoC