1

ユーザーはProject、複数のタスクを含むオブジェクトを作成できます。ユーザーがプロジェクトにexecuteこれらすべてのタスクを指示すると、Sidekiq からデフォルトのキューに入れられます。

問題は、ユーザーが 1000 個のタスクを含むプロジェクトを作成してボタンをクリックするexecuteと、それらの 1000 個のタスクすべてがキューに入れられることです。その直後に、別のユーザーが 1 つのタスクのみでプロジェクトを作成した場合、このプロジェクトを実行すると、その唯一のタスクが行末に表示されます。

そのバックグラウンド プロセスがより民主的な方法で機能することを望みます。各プロジェクトに独自のキューがある場合、1000 タスク キューが終了する前に、2 番目のプロジェクトの 1 つのタスクが実行される可能性があります。

そのためには、プロジェクトごとに個別のキューが必要であり、動的に作成する必要があります。代わりに次を使用してそれを達成しようとしていますperform_async:

Sidekiq::Client.push('queue' => "project_#{self.project.id}", 'class' => TaskWorker, 'args' => [self.id])

しかし、executeプロジェクトを実行しようとすると、すべてのタスクが「project_somenumber」というキューに配置されますが、どれも実行されません。を使用するときはSidekiq::Client.push、キューに実行を開始するように指示する必要があるようです。それが正しいか?どうすればそのキューを開始できますか?

4

2 に答える 2

2

Sidekiq は動的キュー名をサポートしていません。Sidekiq の起動時に、処理するキューを「sidekiq -q queue1 -q queue2 ...」で指定します。詳細については、Sidekiq の Advanced Options wiki ページを参照してください。

于 2013-05-15T20:59:29.193 に答える