我有一个 webapi,旨在以队列方式处理报告。应用程序采取的步骤如下:
- 接收内容
- 将内容映射到对象并将其放入队列
- 轮询队列中的待处理项目
- 一次处理一个队列中的项目
我正在考虑使用实体框架来创建排队项目的数据库,例如:
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,而不是不断地轮询数据库并一一取出待处理的项目?我以前没有使用过队列。
一种想法是创建一个任务队列,并在一个单独的线程上处理所有待处理的任务。有点类似于用线程处理队列的最有效方法,但我想确保我走的是最有效的路线。
编辑:我在这里遇到的一个大问题是向用户显示进度的最佳方式。一旦用户提交内容,他就会被带到一个新页面,并可以通过批次标识符查看状态。为了通知用户,是否需要 MSMQ 或 NServiceBus?这似乎是请求/确认/推送范式的变体?