9 个不稳定版本
0.5.0 | 2023 年 11 月 17 日 |
---|---|
0.4.0 | 2023 年 1 月 25 日 |
0.3.1 | 2021 年 7 月 17 日 |
0.3.0 | 2021 年 1 月 25 日 |
0.1.3 | 2020 年 10 月 10 日 |
#80 在 日期和时间
每月 200 次下载
31KB
476 行
woddle
一个异步、同步、基于数据库的 Rust 作业调度器
注意:woddle 需要 Rust 1.60 或更高版本。
使用方法
[dependencies]
woddle = "0.5"
# For connection pooling
# woddle = { version = "0.5", features = ["pool-mobc"] }
功能
- 通过间隔调度
- 通过 cron (quartz) 调度
- 通过 PostgreSQL 在多个实例之间同步
- 完全异步(目前仅支持 Tokio)
- 可选使用 mobc 进行数据库连接池管理
配置
use woddle::{async_trait, JobConfig, RunnerConfig, Job, JobRunner};
use std::time::Duration;
#[derive(Clone)]
struct MyJob {
config: JobConfig,
}
#[async_trait]
impl Job for MyJob {
async fn run(&self) {
println!("starting my job!");
}
fn get_config(&self) -> &JobConfig {
&self.config
}
}
#[tokio::main]
async fn main() {
let job_cfg = JobConfig::new("my_job", "someSyncKey").interval(Duration::from_secs(120));
let my_job = MyJob { config: job_cfg };
let config = RunnerConfig::default().check_interval(Duration::from_secs(60));
let job_runner = JobRunner::new(config).add_job(my_job);
tokio::spawn(async move {
if let Err(e) = job_runner.start().await {
eprintln!("error: {}", e);
}
});
...
}
使用连接池进行配置
use mobc::Pool;
use mobc_postgres::{tokio_postgres, PgConnectionManager};
use tokio_postgres::{Config, NoTls};
use woddle::{async_trait, JobConfig, RunnerConfig, Job, JobRunner};
use std::time::Duration;
#[tokio::main]
async fn main() {
let config = Config::from_str("host=localhost user=postgres port=5432")
.expect("default config is valid");
let manager = PgConnectionManager::new(config, NoTls);
let pool = Pool::builder().build(manager);
let job_cfg = JobConfig::new("my_job", "someSyncKey").cron("0/15 * * * * * *");
let my_job = MyJob { config: job_cfg };
let config = RunnerConfig::default()
.check_interval(Duration::from_secs(1))
.pool(pool.clone());
let job_runner = JobRunner::new(config).add_job(my_job);
tokio::spawn(async move {
if let Err(e) = job_runner.start().await {
eprintln!("error: {}", e);
}
});
...
}
更多示例
可以在 示例 文件夹中找到。
运行方式
RUST_LOG=info cargo run --example basic
在间隔和 cron 中
您可以使用此库配置多个间隔、延迟和 cron 调度。
RunnerConfig
initial_delay
- 延迟作业运行器的启动,当它最初启动时(默认为 None)
check_interval
- 定义作业运行器检查是否有作业应该运行的时间间隔(默认为 60s)
JobConfig
interval
- 作业应该运行的时间间隔cron
- 作业应该运行的 cron 调度(使用 quartz cron 表达式)
每个作业都需要设置 interval
或 cron
,否则作业运行器将错误退出。在选择这些值时,请记住,要给作业足够的时间运行,并相应地设置 check_interval
。
例如,使用cron
表达式的最小运行时间是每1秒一次。如果您选择一个非常低的check_interval
,例如每10毫秒一次,您可能会遇到问题。在这种情况下,由于四舍五入的问题,工作可能会在相同的一秒内运行几次。
因此,任何低秒级的运行间隔,具有亚秒级的检查间隔,可能会导致不一致,并且超出了这个库的范围。
依赖关系
~9–20MB
~283K SLoC