graceful_shutdown

Function graceful_shutdown 

Source
pub async fn graceful_shutdown(wait_time: Duration)
Examples found in repository?
examples/metrics_basic.rs (line 45)
19async fn main() {
20    Logger::new().init();
21    info!("current process pid:{}", process::id());
22    info!("service start...");
23
24    // build http /metrics endpoint
25    let metrics_port = 8090;
26    let metrics_server = prometheus_init(metrics_port);
27    let metrics_handler = tokio::spawn(metrics_server);
28
29    let app_port = 8080;
30    // http handler
31    let http_handler = tokio::spawn(async move {
32        let address: SocketAddr = format!("0.0.0.0:{}", app_port).parse().unwrap();
33
34        info!("http server run on:{}", address.to_string());
35
36        // Create axum router
37        let router = api_router();
38
39        // Create a `TcpListener` using tokio.
40        let listener = TcpListener::bind(address).await.unwrap();
41
42        // Run the server with graceful shutdown
43        let graceful_wait_time = 5;
44        axum::serve(listener, router)
45            .with_graceful_shutdown(graceful_shutdown(Duration::from_secs(graceful_wait_time)))
46            .await
47            .expect("failed to start gateway service");
48    });
49
50    // start http gateway and metrics service
51    let _ = tokio::try_join!(http_handler, metrics_handler)
52        .expect("failed to start http gateway and metrics service");
53}