有用な情報があまり見つからないという質問があります。これが可能かどうか、もしそうなら、それをどのように実装するのが最善かを考えています。
バックグラウンドで大量のデータ処理を行うアプリをRailsで構築していますDelayedJob
(…私たちにとってはうまく機能しています。)
アプリは AWS で実行され、Capistrano で構成されたいくつかの異なる環境があります。
処理負荷が高い場合、DelayedJob
キューがバックアップされることがありますが、これはほとんど問題ありません。別のノードに傾向がある 1 つまたは 2 つのキューがあります。「詰まった」キューを無視するため、1 つまたは 2 つのキューを処理し続け、最新の状態を維持します。たとえば、個々のジョブには 1 時間以上かかるものもあり、次のワーカーがタスクを完了して優先ジョブを確認するまで、パスワードを忘れた場合の電子メールの配信が 90 分間保留されることは望ましくありません。
私が望むのは、2 つの異なる明示的なキューを処理する 1 つのワーカーを起動する個別の EC2 インスタンスを用意することです。
「--QUEUES」オプションを使用して 1 つまたは 2 つのワーカーを起動することにより、開発マシンでこれを手動で実行できます。
これが私の質問です。カピストラーノで新しいロールを定義し、そのロールのノードに異なる数のワーカーを開始して特定のキューを処理するように指示するにはどうすればよいですか? 繰り返しますが、通常のdelayed_jobs ロールは 3 ワーカーに設定され、すべてのキューを実行します。
これは可能ですか?より良い方法はありますか?
現在、Rails 3.2.13 と PostgreSQL 9.2 およびdelayed_job
gem を使用しています。