关于akka-http服务器的问题。我有一个顶级mapResponse
包裹所有其他路线。这个mapResponse
包装了json中的所有响应。最近我发现有时我的服务器返回503错误,并带有纯文本说明。我发现原因是akka.http.server.request-timeout
配置值 - 它太小了。但为什么我没有用顶级mapResponse
来捕捉这些回复?我发现此503响应是在HttpServerBluePrint.TimeoutAccessImpl.apply
中创建的,它以某种方式忽略了我的mapResponse
。
这是最小的再现代码。我在logAndReturn200
函数中包装了所有路由。我希望我的所有路线都会返回StatusCodes.OK
。但是/bar
会返回超时错误。
val logAndReturn200 = mapResponse { response =>
println(response)
HttpResponse(StatusCodes.OK)
}
val route = {
logAndReturn200 {
get {
path("foo") {
complete("OK")
} ~
path("bar") {
val promise = Promise[Unit]()
actorSystem.scheduler.scheduleOnce(10.seconds) {
promise.success(())
}
onSuccess(promise.future) {
complete("OK")
}
}
}
}
}
val bindingFuture = Http().bindAndHandle(route, "localhost", 8080)