我有一个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或ConcurrentQueue的方法? 我以前没有使用过队列。
一个想法是创建一个任务队列,并在单独的线程上处理所有待处理任务。与最有效地使用线程处理队列的方式有点类似,但我想确保我走的是最有效的路线。
编辑: 我在这里有一个很大的问题,那就是向用户显示进度的最佳方法。一旦用户提交内容,他将被带到一个新页面,并可以通过批次标识符查看状态。 是否需要MSMQ或NServiceBus来通知用户? 这似乎是请求/确认/推送范例的变体?