0

私は ActiveRecord モデルを持っています:

User(id,user_specific_attributes, last_check:datetime, check_priority:integer, today_api_calls:integer)

1日1回、それぞれのAPI呼び出しを行っていますUser。API にはいくつかの重要な制限があります。

  • 午前4時から午後8時まで利用できます
  • 呼び出し回数の制限: 1 分あたり 10 回 = タイムアウト 6 秒
  • 通話回数制限:3000回/日

get_some_data_from_api()それぞれUserを 1 日 1 回 (午前 4 時に開始)実行する必要があります。実行順序はcheck_priority列ごとに定義されます。エラーが発生した場合はget_some_data_from_api()、6 秒後にジョブを再起動する必要があります (API 制限)。

この場合に適した宝石はありますか?

Sidekiq、Delayed Job、Resque などの Gem は不適切です。それらを使用して、特定の時間ですべてのジョブをキューに入れる必要があります。検討:

  1. 優先度の高い新しいジョブを追加する (すべての次のジョブを再キューに入れますか?)
  2. ジョブの実行には 6 秒以上かかる場合があります
  3. エラーが発生した場合にジョブを再開しています (すべての次のジョブをキューに入れ直しますか?)
4

1 に答える 1

0

遅延ジョブも機能します。特定の時間に実行し、ジョブが失敗した場合に再スケジュールするオプションがあります。

DJ はアプリの別のインスタンスとして実行されます。ジョブに優先順位を割り当てることができます。実施時期は問いません。失敗時の再試行を構成するオプションが組み込まれています。

特定の時間にジョブをスケジュールし、それらを再スケジュールするには、自己永続的なジョブを使用します。そのため、ジョブが完了すると、スケジュールが再設定されます。何かのようなもの

def run_me
  ///code code
   User.delayed_job(:run_at => next_day).run_me
end

同じ方法で特定のエラーを処理できます。たとえば、API の制限を超えた場合、例外をキャッチして、6 秒ではなく翌日に再スケジュールすることができます。

于 2013-09-24T13:48:09.067 に答える