我有一个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调用。