私のアプリケーションでは、ユーザーごとに順次処理する必要があるresqueジョブが作成され、できるだけ早く処理する必要があります(1秒の最大遅延)。Resque:ユーザーごとに順次実行されるタイムクリティカルなジョブ
例:user1とjob2のjob1とjob2がuser2のjob3に対して作成されています。 Resqueはjob1とjob3を並行して処理できますが、job1とjob2は順番に処理する必要があります。
は、私は解決策のためのさまざまな考えがあります。
- 私は別のキューを使用することができます(例えばqueue_1 ... queue_10)を、各キュー(例えば
rake resque:work QUEUE=queue_1
)のために労働者を起動します。 - 動的な「ユーザーキュー」(例:queue _#{user.id})を使用してresqueを拡張しようとすると、1人の作業者しか実行できません(Resque: one worker per queueで質問)
- 私はジョブを非再キューに入れ、それらのジョブを処理するresque-lock(https://github.com/defunkt/resque-lock)を持つ "ユーザごとのメタジョブ"を使用することができました。
これらのシナリオのいずれかについて実際に経験がありますか?それとも、考えてみる価値のある他のアイデアがありますか?私はどんな入力にも感謝します、ありがとう!
問題は、彼らはそれらが同時に作成されていないので、job1が明示的に(それらが異なる要求などで作成された可能性がある)JOB2について知るべきではないということである。場合 – lacco
私はjob2上でresque-retryを使うだろうが、 job1が終了し、後で再キューしない場合にチェックを実行する - resque-retryは、必要に応じて指数バックオフまたは制限付き試行を使用するように設定できます。 – TomDunning
job2は、特定のユーザーのjob1が進行中であることをどのように認識していますか? – lacco