ユーザーは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
、キューに実行を開始するように指示する必要があるようです。それが正しいか?どうすればそのキューを開始できますか?