Apalis is a simple, extensible multithreaded background job processing library for Rust.
tower
] ecosystem of
middleware, services, and utilities.Apalis job processing is powered by [tower::Service
] which means you have access to the [tower
] middleware.
Apalis has support for
To get started, just add to Cargo.toml
toml
[dependencies]
apalis = { version = "0.4", features = ["redis"] }
```rust use apalis::prelude::*; use apalis::redis::RedisStorage; use serde::{Deserialize, Serialize}; use anyhow::Result;
struct Email { to: String, }
async fn email_service(job: Email, ctx: JobContext) { info!("Do something"); }
async fn main() -> Result<()> { std::env::setvar("RUSTLOG", "debug"); envlogger::init(); let redis = std::env::var("REDISURL").expect("Missing env variable REDISURL"); let storage = RedisStorage::new(redis).await?; Monitor::new() .registerwithcount(2, move || { WorkerBuilder::new("email-worker-1") .withstorage(storage.clone()) .buildfn(emailservice) }) .run() .await }
```
Then
```rust
//This can be in another part of the program or another application
async fn produceroutejobs(storage: &RedisStorage
```
If you are running Apalis Board, you can easily manage your jobs. See a working Rest API here
Since we provide a few storage solutions, here is a table comparing them:
| Feature | Redis | Sqlite | Postgres | Sled | Mysql | Mongo | Cron | | :-------------- | :---: | :----: | :------: | :--: | :---: | :---: | :--: | | Scheduled jobs | ✓ | ✓ | ✓ | x | ✓ | x | ✓ | | Retryable jobs | ✓ | ✓ | ✓ | x | ✓ | x | ✓ | | Persistence | ✓ | ✓ | ✓ | x | ✓ | x | BYO | | Rerun Dead jobs | ✓ | ✓ | ✓ | x | ✓ | x | x |
```mermaid sequenceDiagram participant App participant Worker participant Postgres
App->>+Worker: Add job to queue
Worker->>+Postgres: Poll queue for job
Postgres-->>-Worker: Job data
Worker->>+Postgres: Update job status to 'running'
Postgres-->>-Worker: Confirmation
Worker->>+App: Notify job started
loop job execution
Worker-->>-App: Report job progress
end
Worker->>+Postgres: Update job status to 'completed'
Postgres-->>-Worker: Confirmation
Worker->>+App: Notify job completed
```
tower
] - Tower is a library of modular and reusable components for building robust networking clients and servers.v 0.4
v 0.3
v 0.2
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
We use SemVer for versioning. For the versions available, see the tags on this repository.
See also the list of contributors who participated in this project.
It was formerly actix-redis-jobs
and if you want to use the crate name please contact me.
This project is licensed under the MIT License - see the LICENSE.md file for details