29 个版本
0.6.0-rc.5 | 2024 年 7 月 25 日 |
---|---|
0.6.0-alpha.0 | 2024 年 6 月 30 日 |
0.5.1 | 2024 年 3 月 13 日 |
0.4.7 | 2023 年 11 月 18 日 |
0.3.4 | 2022 年 9 月 20 日 |
#519 in 异步
12,819 每月下载量
在 5 个 crate 中使用 (via apalis)
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