< 返回版块

lsk569937453 发表于 2023-03-08 11:30

#[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的响应式流程。

评论区

写评论
ManonLoki 2023-03-09 12:17

std::thread::spawn(move || { pool::pgpool::schedule_task_connection_pool(); });

改成

tokio::task::spawn_blocking(move||{ pool::pgpool::schedule_task_connection_pool(); });

之后用select!统一控制就好了

它会给你单独开一个线程跑你的连接池的

1 共 1 条评论, 1 页