2017-11-20 14 views
0

私はサードパーティ製のサーバーからデータを取得する必要があり、そのサーバーは1秒あたり最大1リクエストを許可するアプリケーションに取り組んでいます。キューレートの制限

すべてのリクエストはジョブとして送信され、Laravel "Rate Limiting"を実装して1秒あたり1ジョブをリリースしようとしていますが、なぜ実装する必要があるのか​​把握できず、ウェブには実例はありません。

誰でも実装しましたか?

これはどのようなヒントですか?あなたはこのような何かを行うことができる唯一の単一のワーカー持っていると仮定すると、

+0

内部APIを使用して外部APIを使用し、独自の内部APIを使用するジョブを使用します。レートは独自の内部APIを制限します。 – Ohgodwhy

答えて

0

  • を行う必要があり何が(マイクロ秒で)仕上げの間に1秒マイナス差である
  • スリープ時間を時間を取得します時間と開始時間ので、基本的に

doSomething() 
$time = microtime(true); 
usleep(1000 - ($time - LARAVEL_START)); 
0

このパッケージを使用すると、Redisまたはファイルなどの別のソースでレート制限を使用できます。設定を使用してバケットのサイズとレートを期限の一部として設定するので、非常に小さい記憶域になります。

composer require bandwidth-throttle/token-bucket 

https://github.com/bandwidth-throttle/token-bucket

それはあなたの例で利用できるようにする無料のトークン、1分間待機しますので、それは、場合にチェックをラップすることができます。実際には、新しい分まで必要な時間、サービスをスリープさせます。