如何使用akka流为10K请求发出htttp请求

时间:2016-12-08 18:26:40

标签: scala akka-stream akka-http spray-json

我使用akka-http和akka-stream构建服务器但是它在2K +请求中丢失了一些请求。我错过了什么,或者我对akka的理解是错误的。

这是我的代码

  implicit val actorRef = ActorSystem("system", testConf)
  implicit val materializer = ActorMaterializer(ActorMaterializerSettings(actorRef).withInputBuffer(initialSize = 4, maxSize = 16))
  implicit val requestTimeout = Timeout(8 seconds)

  def response(req: HttpRequest): Future[Response] = {
    val connectionFlow: Flow[HttpRequest, HttpResponse, Future[Http.OutgoingConnection]] =
      Http().outgoingConnection(host = "url").async
    for {
      res <- Source.single(req.copy(uri = s"${req.uri.path}?${req.uri.rawQueryString.get}")).via(connectionFlow).runWith(Sink.head)
      data <- res.entity.toStrict(5 second)
    } yield (data.getData().decodeString("UTF-8"), res.status.intValue())
  }

谢谢。

1 个答案:

答案 0 :(得分:1)

很可能在你的理解的第一部分中存在超时或服务器端错误,因此你只能在res中获得成功的回复。

我建议您使用物料工具中的withSupervisionStrategy创建流程/图表来处理您的请求,这样您就可以看到究竟出了什么问题。实施细节取决于您的业务逻辑。