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}