コントローラへのリクエストに処理時間がかかるアプリケーションがあります。コントローラは要求ごとにスレッドを開始し、最終的にはいくつかのデータをデータベースに返します。処理できるリクエストの数を制限する必要があります。したがって、制限が100であるとしましょう。コントローラーがすでに100個の要求を処理している場合、少なくとも1つの要求が完了するまで101番目の要求は503の状態を返します。.netcore APIコントローラへのリクエスト数を制限します。
現在のプロセス数を維持するためにアプリケーション全体の静的カウンタを使用できますが、これを行うにはより良い方法がありますか?
EDIT:
コントローラが応答する時間がかかるコントローラは、静止データのいくつかのTBに及ぶ大規模なデータベースであり、別のAPIを呼び出しているためである理由。私が理論的にこれを最適化することができたとしても、それは私が制御できるものではありません。さらに悪いことに、サードパーティ製のAPIは、同時に10以上のリクエストがあると、タイムアウトします。私はすでに着信要求をサービスバスキューにドロップしています。私はちょうどいい数の要求が来ると、それが設定された数の要求を超えたときに返す503のグローバルなカウントを保持するために、私のAPIコントローラで良い方法が必要です。
多分、処理に時間がかからないようにプロセスを作る方法を考えていますか?そういうわけで、まず最初にこのような "ハック"は必要ありません。 – jpgrassi
** ASP.NET(Core)アプリケーション内でスレッド**を生成しないでください!あなたはスレッド管理を使いこなす。要求がCPUを大量に使用する場合は、**要求スレッド**で実行します。 I/O集約型(ネットワーク、データベース、ファイルシステム)の場合は、async/awaitを使用します。他のすべてのもの(長時間実行されているCPUベースのタスク)では、バックグラウンドワーカー(別個のアプリケーションとして)とメッセージバスを使用して – Tseng