如何控制akka流背压慢下游api

时间:2017-10-29 10:54:23

标签: scala akka akka-stream backpressure

我有一个API调用另一个下游API。下游api有其局限性,它的吞吐量每秒只能处理75个请求。

我想使用akka流控制API,以便下游api每秒不超过75个请求。

以下是代码段。

implicit val actorSystem = ActorSystem("api")
implicit val flowMaterializer = ActorMaterializer()

val httpService = Http()
val serverSource: Source[Http.IncomingConnection, Future[Http.ServerBinding]] =
      httpService.bind(interface = "127.0.0.1", 8080)

val binding: Future[Http.ServerBinding] =
      serverSource.to(Sink.foreach { connection =>
        connection.handleWithSyncHandler(requestHandler)
      }).run()

def requestHandler: HttpRequest => HttpResponse = {
    case HttpRequest(GET, Uri.Path("/downstream-api"), _, _, _) =>
      HttpResponse(entity = scala.io.Source.fromURL("https://downstream-api.url/api").mkString)
  }

当我通过Gatling每秒发送100个请求时。由于下游api无法处理负载,因此30%的请求无法发送。是否有办法应用背压进行配置,如果无法处理,可以避免进行下游api调用。

0 个答案:

没有答案