34 releases

0.6.0-rc.8 Oct 11, 2024
0.6.0-rc.5 Jul 25, 2024
0.5.5 Sep 5, 2024
0.5.1 Mar 13, 2024
0.3.4 Sep 20, 2022

#901 in Asynchronous

Download history 3132/week @ 2024-07-21 2816/week @ 2024-07-28 3200/week @ 2024-08-04 2941/week @ 2024-08-11 3249/week @ 2024-08-18 3437/week @ 2024-08-25 2605/week @ 2024-09-01 1592/week @ 2024-09-08 2027/week @ 2024-09-15 1672/week @ 2024-09-22 1179/week @ 2024-09-29 1682/week @ 2024-10-06 825/week @ 2024-10-13 1827/week @ 2024-10-20 1235/week @ 2024-10-27 2086/week @ 2024-11-03

6,068 downloads per month
Used in 5 crates (via apalis)

MIT license

160KB
3.5K SLoC

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::layers::retry::RetryLayer;
use apalis::layers::retry::RetryPolicy;
use tower::ServiceBuilder;
use apalis_cron::Schedule;
use std::str::FromStr;
use apalis::prelude::*;
use apalis_cron::CronStream;
use chrono::{DateTime, Utc};

#[derive(Clone)]
struct FakeService;
impl FakeService {
    fn execute(&self, item: Reminder){}
}

#[derive(Default, Debug, Clone)]
struct Reminder(DateTime<Utc>);
impl From<DateTime<Utc>> for Reminder {
   fn from(t: DateTime<Utc>) -> Self {
       Reminder(t)
   }
}
async fn send_reminder(job: Reminder, svc: Data<FakeService>) {
    svc.execute(job);
}

#[tokio::main]
async fn main() {
    let schedule = Schedule::from_str("@daily").unwrap();
    let worker = WorkerBuilder::new("morning-cereal")
        .layer(RetryLayer::new(RetryPolicy::retries(5)))
        .data(FakeService)
        .stream(CronStream::new(schedule).into_stream())
        .build_fn(send_reminder);
    Monitor::<TokioExecutor>::new()
        .register(worker)
        .run()
        .await
        .unwrap();
}

Dependencies

~4–14MB
~184K SLoC