A Rust implementation of Celery for producing and consuming asyncronous tasks with a distributed message queue.
We welcome contributions from everyone regardless of your experience level with Rust. For complete beginners, see HACKING_QUICKSTART.md.
If you already know the basics of Rust, the Rusty Celery Book is the best place to start. If you're coming from Python you may also be interested to know what's different. And if you've never heard of Celery, the official Celery Project is a great source of tutorials and overviews.
Define tasks by decorating functions with the task
attribute.
use celery::TaskResult;
#[celery::task]
fn add(x: i32, y: i32) -> TaskResult<i32> {
Ok(x + y)
}
Create an app with the app
macro
and register your tasks with it:
let my_app = celery::app!(
broker = AMQP { std::env::var("AMQP_ADDR").unwrap() },
tasks = [add],
task_routes = [
"*" => "celery",
],
);
Then send tasks to a queue with
my_app.send_task(add::new(1, 2)).await?;
And consume tasks as a worker from a queue with
my_app.consume().await?;
The ./examples
directory contains a simple Celery app that is implemented in both Rust (celery_app.rs) and Python (celery_app.py) using an AMQP broker.
If you already have an AMQP broker running you can set the environment variable AMQP_ADDR
to your broker's URL (e.g., amqp://localhost:5672//
, where
the second slash at the end is the name of the default vhost).
Otherwise simply run the helper script:
./scripts/brokers/amqp.sh
This will download and run the official RabbitMQ image (RabbitMQ is a popular AMQP broker). Then from a separate terminal run the script:
./examples/python_to_rust.sh
This sends a series of tasks from the Python app to the Rust app. You can also send tasks from Rust to Python by running:
./examples/rust_to_python.sh
✅ = Supported and mostly stable, although there may be a few incomplete features.
🔴 = Not supported yet but on-deck to be implemented soon.
Status | Tracking | |
---|---|---|
Protocol | ||
Producers | ✅ | |
Consumers | ✅ | |
Brokers | ✅ | |
Backends | 🔴 | |
Beat | 🔴 | |
Baskets | 🔴 |
Status | Tracking | |
---|---|---|
AMQP | ✅ | |
Redis | 🔴 |
Status | Tracking | |
---|---|---|
RPC | 🔴 | |
Redis | 🔴 |
Rusty Celery is an open source community effort. It is also backed by Structurely, a start-up building conversational AI that has been using Python Celery in production since 2017.