我有一个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; }
}
Run Code Online (Sandbox Code Playgroud)
我的问题 - 是否有一种更有效的方法,使用NServiceBus,BlockingCollection或ConcurrentQeueue,而不是不断轮询数据库并逐个拉出待处理的项目?我之前没有使用过队列.
一种想法是创建一个任务队列,并在一个单独的线程上处理所有挂起的任务.有点类似于使用线程处理队列的最有效方法,但我想确保我走的是最有效的路由.
编辑:我在这里遇到的一个重要问题是向用户显示进度的最佳方式.一旦用户提交内容,他就会进入新页面,并可以按批次标识符查看状态.MSMQ是必需的,还是NServiceBus,以便通知用户?这似乎是REquest/Acknowledge/Push范式的变体?