ASP.Net Web API中的消息队列

Uri*_*ren 7 ajax asp.net-mvc msmq polling asp.net-web-api

我正在使用AngularJS和ASP.Net WebAPI开发客户端单页面应用程序(SPA).

SPA的一个功能包括上载大型CSV文件,在服务器上处理它,以及将输出返回给用户.

显然,这种计算不能在线完成,因此我实现了一个负责接收文件的UploadController,以及一个负责在计算完成时通知用户的PollingController.

客户端应用程序每隔几秒钟监视一次PollingController.

我没有消息队列的经验,但我的直觉告诉我他们在这种情况下是必需的.

您如何建议以非阻塞,高效的方式实现此功能?

图

举例将受到高度赞赏

Jon*_*and 7

我过去曾使用过基于消息的服务总线框架.

您编写一个应用程序(作为Windows服务运行),用于侦听通过事件总线广播的消息.

您的前端可以将这些消息发布到总线中.

.NET中最流行的框架是NServiceBus,但它最近变得商业化.您也可以查看MassTransit,虽然这个文档很差.

您将要执行的工作流程:

  • MVC App接受上传并将其放入windows服务可访问的某个目录中
  • MVC App发布"UploadReady"消息.
  • 服务接收消息,处理文件,并更新轮询控制器的某些状态.
  • 轮询控制器监视此状态的变化.通常是DB记录等

关于使用这样的框架的好处是,如果您的服务出现故障,或者您重新部署它,任何处理都可以排队和恢复,因此您不会有任何停机时间.


And*_*rei 5

对于长时间运行的操作,您需要单独的Windows服务应用程序(或者工作者角色,如果它是Windows Azure).IIS可能会在池回收时终止ASP.NET进程,并且您的操作将无法完成.

消息队列主要用于通信.您可以在Web和工作器部件之间使用它.但除非您的数据不是超级关键,否则不需要它.您可以使用数据库,缓存,文件系统或其他100种方式建立通信:)

您可以使用SignalR通知您的客户完成处理.