#[launch]
fn rocket() -> _ {
tokio::task::block_in_place(move || {
Handle::current().block_on(async {
configuration_service::app_config_servive::init().await;
})
});
std::thread::spawn(move || {
pool::pgpool::schedule_task_connection_pool();
});
rocket::build().attach(control_plane::stage())
}
tokio::task::spawn_blocking(move || {
Handle::current().block_on(async {
sync_mapping_from_global_app_config().await;
})
});
1.configuration_service::app_config_servive::init() 项目的配置文件加载,如果出错,项目不能启动。
2. pool::pgpool::schedule_task_connection_pool() 内部使用loop+sleep定时检查连接池状态,无异步方法。
3.sync_mapping_from_global_app_config 内部使用loop+sleep定时检查全局变量,异步方法。
使用std::thread::spawn启动的目的是不希望影响tokio的响应式流程。
1
共 1 条评论, 1 页
评论区
写评论std::thread::spawn(move || { pool::pgpool::schedule_task_connection_pool(); });
改成
tokio::task::spawn_blocking(move||{ pool::pgpool::schedule_task_connection_pool(); });
之后用select!统一控制就好了
它会给你单独开一个线程跑你的连接池的