use std::sync::Arc;
use std::time::Duration;
use rocketmq_rust::CronTrigger;
use rocketmq_rust::DelayTrigger;
use rocketmq_rust::IntervalTrigger;
use rocketmq_rust::Task;
use rocketmq_rust::TaskResult;
use rocketmq_rust::TaskScheduler;
use tokio::time::sleep;
use tracing::info;
use tracing::Level;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt().with_max_level(Level::INFO).init();
let scheduler = TaskScheduler::default();
let simple_task = Arc::new(
Task::new("simple_task", "Simple Task", |ctx| async move {
info!("Executing simple task: {}", ctx.task_id);
sleep(Duration::from_millis(100)).await;
TaskResult::Success(Some("Task completed successfully".to_string()))
})
.with_description("A simple demonstration task")
.with_priority(1),
);
let cron_trigger = Arc::new(CronTrigger::every_minute()?);
let interval_trigger = Arc::new(IntervalTrigger::every_seconds(5));
let delay_trigger = Arc::new(DelayTrigger::after_seconds(3));
scheduler.start().await?;
let job1_id = scheduler.schedule_job(simple_task.clone(), cron_trigger).await?;
let job2_id = scheduler.schedule_job(simple_task.clone(), interval_trigger).await?;
let job3_id = scheduler.schedule_job(simple_task.clone(), delay_trigger).await?;
info!("Scheduled jobs: {}, {}, {}", job1_id, job2_id, job3_id);
sleep(Duration::from_secs(30)).await;
let status = scheduler.get_status().await;
info!("Scheduler status: {:?}", status);
scheduler.stop().await?;
Ok(())
}