У меня есть webapi, который предназначен для обработки отчетов в очереди. Шаги, которые принимает приложение, следующие:
- Получить контент
- Сопоставьте контент с объектом и поместите его в очередь
- Опрос для ожидающих элементов в очереди
- Элементы процесса в очереди поочередно
Я думал использовать 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, чем постоянный опрос базы данных и вытаскивание отложенных элементов один за другим? Я раньше не использовал очереди.
Одна мысль заключается в создании очереди задач, а в отдельном потоке обрабатываются все ожидающие задачи. Скорее похоже на Самый эффективный способ обработки очереди с потоками, но я хочу, чтобы я стал самым эффективным маршрутом.
EDIT: Большой вопрос, который у меня есть, - лучший способ отобразить прогресс для пользователя. Как только пользователь отправляет контент, он переходит на новую страницу и может просматривать статус с помощью идентификатора партии. Требуется ли MSMQ или NServiceBus, чтобы уведомить пользователя? Это похоже на вариацию парадигмы REQUEST/Acknowledge/Push?