私はプレイを持っています!httpリクエストを送信して別のサーバーと通信するScalaアプリケーション。このシステムには制限があります。1 つのトークンに対して同時に処理できる HTTP リクエストは 5 つだけです。
私はこの方法を書きました:
import scala.concurrent.ExecutionContext.Implicits.global
private def sendApiRequest(method: String, params: Option[JsValue] = None)(implicit token: String): Future[JsObject] = {
if (concurrentRequests.get(token).isEmpty) {
concurrentRequests += token -> 1
} else {
concurrentRequests += token -> (concurrentRequests.get(token).get + 1)
}
println(s"$token: ${concurrentRequests.get(token).get}")
val request = WS.url(API_URL)
.withMethod("POST")
.withBody(Json.obj(
"application_id" -> clientId,
"method" -> method,
"token" -> token,
"param" -> params
))
request.execute().map(response => {
val result = response.json.as[JsObject]
if (!result.keys.contains("data")) {
throw new Exception(result.toString())
} else {
result
}
})
}
そして、このメソッドを使用するアクターがいて、数秒後に例外が発生します。
私の質問は次のとおりです。「実行モード」で機能の数を制御するにはどうすればよいですか? デフォルトの実行コンテキストではなく、別の実行コンテキストを使用する必要がありますか? 説明してください、または実行コンテキスト、スレッドなどの良い紹介をしてください
いちいち送信するのではなく、できるだけ早くリモートサービスから情報を取得したい
ありがとうございました!