首页 > 解决方案 > Akka Streams / HTTP:从响应中获取原始请求

问题描述

我有一个 Akka Streams 源,它通过一个流程并发布一个 HTTP 请求:

source.map(toRequest)
  .via(Http().outgoingConnection(host))
  .map(toMessage) 

假设该toRequest方法将字符串映射到HttpRequest,并且该toMessage方法将 映射HttpResponse到下游处理所需的消息类。假设消息类需要包含一些原始信息。

是否可以从原版HttpRequest中获得HttpResponse?如果没有,有什么办法可以保留一些原始信息?

标签: scalaakkaakka-streamakka-http

解决方案


一种方法是使用Future基于- 的客户端 API 变体和自定义案例类,该类包含您想要向下游传播的信息。例如:

case class Message(request: HttpRequest, response: HttpResponse)

source
  .map(toRequest)
  .mapAsync(parallelism = 3) { request => // adjust the level of parallelism as needed
    Http().singleRequest(request).map(response => Message(request, response))
  }
  // continue processing; at this point you have a Source[Message, _]

推荐阅读