akka-http:完整的请求流
akka-http: complete request with flow
假设我设置了一个任意复杂的Flow[HttpRequest, HttpResponse, Unit]
。
我已经可以使用所述流程来处理传入的请求
Http().bindAndHandle(flow, "0.0.0.0", 8080)
现在我想添加日志记录,利用一些现有的指令,比如 logRequestResult("my-service"){...}
有没有办法将此指令与我的流程结合起来?我想我正在寻找另一个指令,类似于
def completeWithFlow(flow: Flow): Route
这可能吗?
N.B.: logRequestResult 是一个例子,我的问题适用于任何可能有用的指令。
http://doc.akka.io/docs/akka/2.4.2/scala/http/routing-dsl/overview.html
您是在寻找 route2HandlerFlow
还是 Route.handlerFlow
?
我相信 Route.handlerFlow
会基于 implicit
s 工作。
例如/
val serverBinding = Http().bindAndHandle(interface = "0.0.0.0", port = 8080,
handler = route2HandlerFlow(mainFlow()))
事实证明,一种(也许是唯一的)方法是连接并具体化一个新流,并将提取的请求提供给它。下面的例子
val myFlow: Flow[HttpRequest, HttpResponse, NotUsed] = ???
val route =
get {
logRequestResult("my-service") {
extract(_.request) { req ⇒
val futureResponse = Source.single(req).via(myFlow).runWith(Sink.head)
complete(futureResponse)
}
}
}
Http().bindAndHandle(route, "127.0.0.1", 9000)
假设我设置了一个任意复杂的Flow[HttpRequest, HttpResponse, Unit]
。
我已经可以使用所述流程来处理传入的请求
Http().bindAndHandle(flow, "0.0.0.0", 8080)
现在我想添加日志记录,利用一些现有的指令,比如 logRequestResult("my-service"){...}
有没有办法将此指令与我的流程结合起来?我想我正在寻找另一个指令,类似于
def completeWithFlow(flow: Flow): Route
这可能吗?
N.B.: logRequestResult 是一个例子,我的问题适用于任何可能有用的指令。
http://doc.akka.io/docs/akka/2.4.2/scala/http/routing-dsl/overview.html
您是在寻找 route2HandlerFlow
还是 Route.handlerFlow
?
我相信 Route.handlerFlow
会基于 implicit
s 工作。
例如/
val serverBinding = Http().bindAndHandle(interface = "0.0.0.0", port = 8080,
handler = route2HandlerFlow(mainFlow()))
事实证明,一种(也许是唯一的)方法是连接并具体化一个新流,并将提取的请求提供给它。下面的例子
val myFlow: Flow[HttpRequest, HttpResponse, NotUsed] = ???
val route =
get {
logRequestResult("my-service") {
extract(_.request) { req ⇒
val futureResponse = Source.single(req).via(myFlow).runWith(Sink.head)
complete(futureResponse)
}
}
}
Http().bindAndHandle(route, "127.0.0.1", 9000)