シナリオ(私は物事を単純化しました):
- 多くのエンド ユーザーは、フロント エンド Web アプリケーション (プロデューサー) からジョブ (たとえば、大きな PDF のレンダリングなどの重いジョブ) を開始できます。
- ジョブは、単一の永続的な RabbitMQ キューに送信されます。
- 多くのワーカー アプリケーション (コンシューマー) がこれらのジョブを処理し、結果をデータストアに書き戻します。
このかなり標準的なパターンは正常に機能しています。
問題: ユーザーが同じ 1 分間に 10 個のジョブを開始し、その時間帯に稼働しているワーカー アプリケーションが 10 個しかない場合、このエンド ユーザーは事実上、すべての計算時間を自分自身のために取っています。
質問: エンド ユーザーごとに常に 1 つのジョブのみが処理されるようにするにはどうすればよいですか? (おまけ: 一部のエンド ユーザー (管理者など) は調整してはなりません)
また、エンド ユーザーが同時にジョブを開始するのをフロント エンド アプリケーションがブロックしないようにします。エンドユーザーには、並行ジョブが一度に 1 つずつ終了するのを待ってもらいたいだけです。
ソリューション?: エンド ユーザーごとに 1 つの自動削除専用キューを動的に作成する必要がありますか? はいの場合、ワーカー アプリケーションにこのキューの使用を開始するように指示するにはどうすればよいですか? 1 つ (そして 1 つだけ) のワーカーがこのキューから消費するようにするにはどうすればよいですか?