Crates.io | persistent-scheduler |
lib.rs | persistent-scheduler |
version | |
source | src |
created_at | 2024-11-01 11:51:30.647225 |
updated_at | 2024-12-01 13:52:33.453647 |
description | A high-performance task scheduling system developed in Rust using Tokio. This system supports task persistence, repeatable tasks, Cron-based scheduling, and one-time tasks, ensuring reliability and flexibility for managing time-based operations in various applications. |
homepage | |
repository | https://github.com/inboxsphere/persistent-scheduler |
max_upload_size | |
id | 1431706 |
Cargo.toml error: | TOML parse error at line 17, column 1 | 17 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
A high-performance task scheduling system developed in Rust using Tokio. This system supports task persistence, repeatable tasks, Cron-based scheduling, and one-time tasks, ensuring reliability and flexibility for managing time-based operations in various applications.
use std::time::Duration;
use persistent_scheduler::{
core::{
context::TaskContext,
store::TaskStore,
task::{Task, TaskFuture},
task_kind::TaskKind,
},
nativedb::meta::NativeDbTaskStore,
};
use serde::{Deserialize, Serialize};
#[tokio::main]
async fn main() {
tracing_subscriber::fmt()
.with_max_level(tracing::Level::INFO)
.init();
let task_store = NativeDbTaskStore::default();
task_store.restore_tasks().await.unwrap();
let context = TaskContext::new(task_store)
.register::<MyTask1>()
.register::<MyTask2>()
.set_concurrency("default", 10)
.start();
context
.add_task(MyTask1::new("name1".to_string(), 32))
.await
.unwrap();
context
.add_task(MyTask2::new("namexxxxxxx".to_string(), 3900))
.await
.unwrap();
tokio::time::sleep(Duration::from_secs(100000000)).await;
}
#[derive(Clone, Debug, Deserialize, Serialize)]
struct MyTask1 {
pub name: String,
pub age: i32,
}
impl MyTask1 {
pub fn new(name: String, age: i32) -> Self {
Self { name, age }
}
}
impl Task for MyTask1 {
const TASK_KEY: &'static str = "my_task_a";
const TASK_QUEUE: &'static str = "default";
const TASK_KIND: TaskKind = TaskKind::Once;
//const RETRY_POLICY: RetryPolicy = RetryPolicy::linear(10, Some(5));
fn run(self) -> TaskFuture {
Box::pin(async move {
println!("{}", self.name);
println!("{}", self.age);
println!("my task1 is running");
Err("return error".to_string())
})
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
struct MyTask2 {
pub name: String,
pub age: i32,
}
impl MyTask2 {
pub fn new(name: String, age: i32) -> Self {
Self { name, age }
}
}
impl Task for MyTask2 {
const TASK_KEY: &'static str = "my_task_c";
const TASK_QUEUE: &'static str = "default";
const TASK_KIND: TaskKind = TaskKind::Cron;
const REPEAT_INTERVAL: Option<u32> = Some(2);
const SCHEDULE: Option<&'static str> = Some("1/2 * * * * *");
const TIMEZONE: Option<&'static str> = Some("Asia/Shanghai");
fn run(self) -> TaskFuture {
Box::pin(async move {
println!("{}", self.name);
println!("{}", self.age);
//tokio::time::sleep(Duration::from_secs(100000)).await;
println!("my_task_c is running");
Ok(())
})
}
}
The MIT License