私は 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 は不適切です。それらを使用して、特定の時間ですべてのジョブをキューに入れる必要があります。検討:
- 優先度の高い新しいジョブを追加する (すべての次のジョブを再キューに入れますか?)
- ジョブの実行には 6 秒以上かかる場合があります
- エラーが発生した場合にジョブを再開しています (すべての次のジョブをキューに入れ直しますか?)