akka-http mapResponse会忽略一些回复

时间:2018-04-05 02:41:23

标签: scala akka-http

关于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)

0 个答案:

没有答案