私は、マルチテナント クラウド ベースのアプリケーションである Web アプリケーション (多数のクライアント、それぞれが独自の「環境」を持っていますが、すべてがハードウェアの共有セット上にある) で作業しており、ユーザーがバッチ処理を行う機能を導入しています。後の処理に使用します。バッチ化された作業の種類は実際には重要ではありません。作業キューなしでそれを行うのは実際には実用的ではないほど十分な量です。基盤となるキュー フレームワークとして RabbitMQ を選択しました。
私たちはマルチテナント アプリであるため、クライアントが別のクライアントに対して長いキュー処理時間を引き起こすことを必ずしも望んでいるわけではありません。すべてのクライアント キューを指す共有ワーカー プール。問題は、私が把握できる限り、ワーカーは交換ではなく、特定のキューに直接バインドされていることです。私たちの理想的な世界では、クライアント キューは、1 つのクライアントが別のクライアントをブロックすることなく、必要に応じてより多くのワーカーを起動したり、アイドル状態のワーカーを閉じたりすることで拡大または縮小できる共有ワーカー プールから処理されます。特定のキューに関連付けられたワーカーを持つことで、多くのワーカーがアクティビティのないキューでアイドル状態になっていることが多いため、実際的な意味でこれを防ぐことができます。
これを達成するための比較的簡単な方法はありますか? 私はRabbitMQにかなり慣れていないので、私たちが求めていることを実際に達成できていません. また、非常に複雑なマルチスレッドの消費者向けアプリケーションを作成する必要もありません。これは、開発とテストの時間の浪費であり、余裕がない可能性があります。私たちのスタックは Windows/.Net/C# ベースです。