#任务调度 #cron 任务 #后台任务 #tower 中间件 #可扩展 #apalis #计划

apalis-cron

一个简单且可扩展的 Rust 库,用于类似 cron 的作业调度

29 个版本

0.6.0-rc.52024 年 7 月 25 日
0.6.0-alpha.02024 年 6 月 30 日
0.5.1 2024 年 3 月 13 日
0.4.7 2023 年 11 月 18 日
0.3.4 2022 年 9 月 20 日

#519 in 异步

Download history 2793/week @ 2024-05-04 3249/week @ 2024-05-11 2972/week @ 2024-05-18 3595/week @ 2024-05-25 2908/week @ 2024-06-01 2537/week @ 2024-06-08 3419/week @ 2024-06-15 3642/week @ 2024-06-22 2374/week @ 2024-06-29 2724/week @ 2024-07-06 3072/week @ 2024-07-13 3140/week @ 2024-07-20 2847/week @ 2024-07-27 3051/week @ 2024-08-03 3072/week @ 2024-08-10 3204/week @ 2024-08-17

12,819 每月下载量
5 个 crate 中使用 (via apalis)

MIT 许可证

150KB
3.5K SLoC

apalis-cron

一个简单且可扩展的 Rust 库,用于类似 cron 的作业调度。由于 apalis-cron 是建立在支持 tower 中间件的 apalis 之上,因此你可以轻松地添加中间件,如跟踪、重试、负载均衡、并发等。

示例

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();
}

依赖项

~4–15MB
~187K SLoC