20 releases

0.5.1 Mar 13, 2024
0.4.9 Jan 10, 2024
0.4.7 Nov 18, 2023
0.4.4 Jul 31, 2023
0.3.4 Sep 20, 2022

#532 in Asynchronous

Download history 251/week @ 2024-01-24 858/week @ 2024-01-31 564/week @ 2024-02-07 615/week @ 2024-02-14 1096/week @ 2024-02-21 819/week @ 2024-02-28 2709/week @ 2024-03-06 3071/week @ 2024-03-13 2120/week @ 2024-03-20 2224/week @ 2024-03-27 3426/week @ 2024-04-03 2485/week @ 2024-04-10 3633/week @ 2024-04-17 3192/week @ 2024-04-24 3694/week @ 2024-05-01 1869/week @ 2024-05-08

12,870 downloads per month
Used in apalis

MIT license

9KB
72 lines

apalis-cron

A simple yet extensible library for cron-like job scheduling for rust. Since apalis-cron is build on top of apalis which supports tower middleware, you should be able to easily add middleware such as tracing, retries, load shed, concurrency etc.

Example

use apalis::prelude::*;
use apalis::layers::{Extension, DefaultRetryPolicy, RetryLayer};
use apalis::cron::Schedule;
use tower::ServiceBuilder;
use std::str::FromStr;

#[derive(Default, Debug, Clone)]
struct Reminder;

impl Job for Reminder {
    const NAME: &'static str = "reminder::DailyReminder";
}
async fn send_reminder(job: Reminder, ctx: JobContext) {
    // Do reminder stuff
}

#[tokio::main]
async fn main() {
    let schedule = Schedule::from_str("@daily").unwrap();

    let service = ServiceBuilder::new()
        .layer(RetryLayer::new(DefaultRetryPolicy))
        .service(job_fn(send_reminder));

    let worker = WorkerBuilder::new("daily-cron-worker")
        .stream(CronStream::new(schedule).to_stream())
        .build(service);

    Monitor::new()
        .register(worker)
        .run()
        .await
        .unwrap();
}

Dependencies

~4–15MB
~203K SLoC