#cron-expression #scheduler #cron #tokio #async-task #fuzzy #async

grizzly_scheduler

使用 cron 表达式运行异步任务的调度器。它建立在 tokio 之上。任务可以是并行或顺序的。可以给 cron 表达式添加模糊随机偏移。

1 个不稳定版本

0.1.0 2024年2月12日

#973并发

自定义许可

39KB
632

Grizzly Cron Scheduler

一个简单易用的调度器,建立在 Tokio 之上,允许您使用 cron 表达式(可选的随机模糊偏移)调度异步任务。

任务可以是两种类型

  • 并行:如果上一个运行尚未完成且新的触发时间已到达,则此作业的两个实例可以同时运行。
  • 顺序:下一次运行作业将不会开始,直到上一个运行完成,因此可能会跳过一些触发。

替代方案

  • tokio cron scheduler:维护良好且功能丰富,但不支持模糊调度或区分并行和顺序作业。

功能

  • 调度并行和顺序作业
  • 使用 cron 表达式调度作业
  • Tracing 集成以进行日志记录
  • 给每个触发时间添加随机模糊偏移
    • 例如,如果作业配置为在每分钟的30秒运行,则可以添加5秒的模糊偏移,因此作业将在每分钟的25秒到35秒之间随机运行

示例

use std::sync::Arc;
use grizzly_scheduler::scheduler::Scheduler;

let scheduler = grizzly_scheduler::scheduler::Scheduler::new_in_utc();
let important_shared_state = Arc::new(5);
let cloned_state = important_shared_state.clone();

let job_id = scheduler.schedule_parallel_job(
       "*/5 * * * * *",                          // run the job on every second divisible by 5 of every minute
       Some("Example Parallel Job".to_string()), // this name will appear in the tracing logs
       Some(chrono::Duration::seconds(2)),       // we want the fuzzy effect of maximally +/-2 seconds
       move ||
          {
             let cloned_state = cloned_state.clone();
             async move {
                 tracing::info!("We are using our important shared state! {}", cloned_state);
             }
          },
       ).unwrap();
scheduler.start().unwrap();

许可

此项目使用 MIT 许可证,可在 LICENSE 文件中找到。

贡献

欢迎所有贡献!请随时提出问题或发起拉取请求。

依赖项

~6–14MB
~146K SLoC