Dun*_*ger 5 signals shutdown rust warp rust-tokio
我正在用 Rust 编写一个带有扭曲的服务。当服务收到 SIGTERM 信号时,我希望它正常关闭,并可能执行一些日志记录或其他工作。
我尝试了很多例子,但没有任何效果。最有希望的似乎来自这个问题,但我似乎无法让它工作,甚至无法编译。我怀疑自从回答这个问题以来事情已经发生了变化。
# Cargo.toml
[dependencies]
tokio = {version = "1", features = ["full"]}
warp = "0.3"
futures = "0.3"
Run Code Online (Sandbox Code Playgroud)
//! main.rs
use warp::Filter;
use futures;
fn main() {
let (tx, rx) = tokio::sync::oneshot::channel();
tokio::run(futures::future::lazy(move || {
let routes = warp::any().map(|| "Hello, World!");
let (_, server) = warp::serve(routes)
.bind_with_graceful_shutdown(([127, 0, 0, 1], 3030), rx);
warp::spawn(server);
}));
println!("Exiting!");
}
Run Code Online (Sandbox Code Playgroud)
//! main.rs
use warp::Filter;
use futures;
fn main() {
let (tx, rx) = tokio::sync::oneshot::channel();
tokio::run(futures::future::lazy(move || {
let routes = warp::any().map(|| "Hello, World!");
let (_, server) = warp::serve(routes)
.bind_with_graceful_shutdown(([127, 0, 0, 1], 3030), rx);
warp::spawn(server);
}));
println!("Exiting!");
}
Run Code Online (Sandbox Code Playgroud)
任何建议或更好的更新代码将不胜感激。
这是有效的示例代码。我受到bind_with_graceful_shutdown包装文档的启发
use tokio::sync::oneshot;
use warp::Filter;
#[tokio::main]
async fn main() {
let routes = warp::any().map(|| "Hello, World!");
let (tx, rx) = oneshot::channel();
let (_addr, server) =
warp::serve(routes).bind_with_graceful_shutdown(([127, 0, 0, 1], 3030), async {
rx.await.ok();
});
// Spawn the server into a runtime
tokio::task::spawn(server);
// Later, start the shutdown...
let _ = tx.send(());
}
Run Code Online (Sandbox Code Playgroud)