【Axum】全局超时异常
异常 全局 超时
2023-09-27 14:23:46 时间
环境
- Time 2022-01-16
- Rust 1.58.0
- Axum 0.4.4
概念
参考:https://docs.rs/axum/latest/axum/index.html
示例
main.rs
use axum::error_handling::HandleErrorLayer;
use axum::{http::StatusCode, routing::get, BoxError, Router};
use std::{net::SocketAddr, time::Duration};
use tower::ServiceBuilder;
#[tokio::main]
async fn main() {
let layer = ServiceBuilder::new()
.layer(HandleErrorLayer::new(handle_timeout_error))
.timeout(Duration::from_secs(4));
let app = Router::new().route("/", get(home)).layer(layer);
let addr = SocketAddr::from(([127, 0, 0, 1], 4444));
println!("listening on {addr}");
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
async fn home() -> String {
tokio::time::sleep(Duration::from_secs(10)).await;
"hello world".to_owned()
}
async fn handle_timeout_error(err: BoxError) -> (StatusCode, String) {
if err.is::<tower::timeout::error::Elapsed>() {
(StatusCode::REQUEST_TIMEOUT, "timeout".to_string())
} else {
(StatusCode::INTERNAL_SERVER_ERROR, format!("error: {err}"))
}
}
总结
定义请求超时时间,处理请求超时错误。
附录
相关文章
- sklearn-1.1.15.鲁棒性回归:异常值模型错误
- springboot全局捕获异常
- Python基础之:Python中的异常和错误
- SpringBoot2.0 基础案例(03):配置系统全局异常映射处理
- WPF MVVM UI分离之《交互与数据分离》 基础才是重中之重~delegate里的Invoke和BeginInvoke 将不确定变为确定系列~目录(“机器最能证明一切”) 爱上MVC3系列~全局异常处理与异常日志 基础才是重中之重~lock和monitor的区别 将不确定变成确定~我想监视我的对象,如果是某个值,就叫另一些方法自动运行 将不确定变成确定~LINQ DBML模型可以对
- [转]NullPointerException异常
- JEP 358: 友好的空指针异常
- 第33节:Java面向对象中的异常
- 服务案例|AI算法在Oracle指标异常检查、故障预测之牛刀小试
- PHP 错误与异常 笔记与总结(5)配置文件中与错误日志相关的选项 && 将错误记录到指定的文件中
- django之异常错误3(Student matching query does not exist.)
- struts2异常处理,global-results定义全局结果处理
- Delphi 触发异常的方法
- 全局异常信息 ex=您的主机中的软件中止了一个已建立的连接
- struts xml中的result的类型、全局结果集、异常mapping、继承
- 浅析Java如何使用@ControllerAdvice、@ExceptionHandler进行全局统一异常处理、如何使用@responseBodyAdvice进行全局统一返回值处理
- Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获
- JAVASE进阶异常
- Effective C++ Item 25 考虑写出一个不抛异常的swap函数
- c# winform捕获全局异常,并记录日志
- Android 12真机调试——安装失败,安装包异常
- 天龙光电毛利率异常 数千万元预收不知从何而来
- Java全局异常处理设计