我可以訪問一個API調用,接受每秒最大調用速率。如果超過速率,則會拋出異常。環繞速率限制API調用
我想把這個調用包裝成一個抽象,這個抽象把通話費率保持在限制之下。它將像網絡路由器一樣工作:處理多個呼叫並將結果返回給關注呼叫率的正確呼叫者。目標是使呼叫代碼儘可能不知道該限制。否則,具有此調用的代碼中的每個部分都必須包裝到try-catch中!
例如:想象一下,您可以從可以添加2個數字的extern API調用方法。這個API可以稱爲每秒5次。任何高於此的值都會導致異常。
爲了說明問題,限制呼叫速率的外部服務就像是一個在回答這個問題
How to build a rate-limiting API with Observables?
附加信息:
既然你不每次從代碼的任何部分調用此方法時都不需要擔心該限制,因此您考慮設計一種可以調用的包裝器方法,而不必擔心速率限制。在內部你關心的限制,但在外面你公開一個簡單的異步方法。
它類似於網絡服務器。它如何將正確的結果包返回給正確的客戶?
多個來電者會調用這個方法,他們會在他們來的時候得到結果。這種抽象應該像一個代理。
我該怎麼辦?
我敢肯定,包裝方法的公司應該像
public async Task<Results> MyMethod()
而且裏面的方法也將執行邏輯,也許使用無擴展(緩衝)。我不知道。
但是如何?我的意思是,對這個方法的多次調用應該將結果返回給正確的調用者。這甚至有可能嗎?
非常感謝!
想到最簡單的方法是使用FiFo('Queue')和某種異步我們實施處理呼叫。 – lokusking
當你有更多的來電比可以處理的時候,你有沒有策略?即如果您在兩天內獲得1000次通話/分鐘,您是否應該放棄一些消息?如果你只是填充一個無界緩衝區(可能會拋出OOM)?或者有一個固定大小的緩衝區,當它滿的時候,會阻止對API的進一步調用? –
我認爲在我的情況下,要長時間保持高通話率才能生成OOM是相當困難的,所以目前我會採取第一種策略。 – SuperJMN