レポートをキュー形式で処理するように設計された webapi があります。アプリケーションが実行する手順は次のとおりです。
- コンテンツを受け取る
- コンテンツをオブジェクトにマップし、キューに配置します
- キュー内の保留中のアイテムのポーリング
- キュー内のアイテムを 1 つずつ処理する
Entity Framework を使用して、次のようなキュー項目のデータベースを作成することを考えていました。
public class EFBatchItem
{
[Key]
public string BatchId { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateCompleted { get; set; }
public string BatchItem { get; set; }
public BatchStatus Status { get; set; }
}
私の質問 - NServiceBus、BlockingCollection、または ConcurrentQeueue を使用して、データベースを常にポーリングし、保留中のアイテムを 1 つずつ引き出すよりも効率的な方法はありますか? 以前にキューを使用したことがありません。
1 つの考えは、タスクのキューを作成し、別のスレッドですべての保留中のタスクを処理することです。スレッドを使用してキューを処理する最も効率的な方法に多少似ていますが、最も効率的なルートを確実に使用したいと考えています。
編集:ここで私が持っている大きな質問は、進行状況をユーザーに表示する最良の方法です。ユーザーがコンテンツを送信すると、新しいページが表示され、バッチ識別子でステータスを表示できます。ユーザーに通知するには、MSMQ または NServiceBus が必要ですか? これは、REquest/Acknowledge/Push パラダイムのバリエーションのように見えますか?