struct SimpleConfigProvider {
configs: Vec<asynq::components::periodic_task_manager::PeriodicTaskConfig>,
}
#[async_trait::async_trait]
impl asynq::components::periodic_task_manager::PeriodicTaskConfigProvider for SimpleConfigProvider {
async fn get_configs(
&self,
) -> asynq::error::Result<Vec<asynq::components::periodic_task_manager::PeriodicTaskConfig>> {
Ok(self.configs.clone())
}
}
#[tokio::main]
async fn main() {
use asynq::scheduler::Scheduler;
let redis_url = std::env::var("REDIS_URL")
.unwrap_or_else(|_| "redis://tenant1:secure_pass123@localhost:6379".to_string());
let redis_config = asynq::backend::RedisConnectionType::single(redis_url).unwrap();
let client = std::sync::Arc::new(
asynq::client::Client::new(redis_config.clone())
.await
.unwrap(),
);
let scheduler = std::sync::Arc::new(
Scheduler::new_with_tenant(client.clone(), None, Some("tenant1".to_string()))
.await
.unwrap(),
);
let config_provider = std::sync::Arc::new(SimpleConfigProvider {
configs: vec![
asynq::components::periodic_task_manager::PeriodicTaskConfig::new(
"demo:periodic_task".to_string(),
"0/30 * * * * *".to_string(), b"hello scheduler".to_vec(),
"default".to_string(),
),
],
});
let manager_config = asynq::components::periodic_task_manager::PeriodicTaskManagerConfig {
sync_interval: std::time::Duration::from_secs(30),
};
let manager = std::sync::Arc::new(
asynq::components::periodic_task_manager::PeriodicTaskManager::new(
scheduler.clone(),
manager_config,
config_provider,
),
);
let _manager_handle = manager.clone().start();
println!("Scheduler running via PeriodicTaskManager. Press Ctrl+C to exit...");
tokio::signal::ctrl_c().await.unwrap();
let entries = scheduler.list_entries("demo_scheduler").await;
println!("Scheduler Entries:");
for entry in entries {
println!(
" id: {}, type: {}, next: {:?}",
entry.id, entry.task_type, entry.next_enqueue_time
);
}
let events = scheduler.list_events(10).await;
println!("Scheduler Events:");
for event in events {
println!(
" task_id: {}, enqueue_time: {:?}",
event.task_id, event.enqueue_time
);
}
manager.shutdown();
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
}