我有一個應用程序,其中對控制器的請求需要一段時間才能處理。控制器爲每個請求啓動一個線程,並最終將一些數據返回給數據庫。我需要限制可以處理多少個請求。假設我們的限制爲100,如果控制器已經處理了100個請求,則101st請求將返回503狀態,直到至少一個請求完成。限制對.netcore API控制器的請求數
我可以使用應用程序範圍內的靜態計數器來保持當前進程的計數,但有沒有更好的方法來做到這一點?
編輯:
爲什麼控制器需要一段時間來作出迴應是因爲控制器調用另一個API,這是一個大的數據庫跨越地球同步數據的幾個TB的原因。即使我可以在理論上優化這一點,但它不是我控制的東西。更糟糕的是,如果我有超過10個併發請求,第三方API會超時。我已經將傳入的請求放入服務總線隊列。我只需要一個很好的方法來控制我的api控制器,以便在全局計數多少次請求進入並返回503時,只要它超出了一定數量的請求。
可能在想方設法讓這個過程不需要很長時間來處理?這樣你就不需要像這樣的「黑客」了。 – jpgrassi
在ASP.NET(核心)應用程序中,不會產生線程**!你搞砸了線程管理。如果請求是CPU密集型的,請在**請求線程**上運行。如果I/O密集型(網絡,數據庫,文件系統)使用async/await。對於其他任何事情(長時間運行基於cpu的任務),使用後臺工作人員(作爲單獨的應用程序)和消息總線進行通信 – Tseng