代码之家  ›  专栏  ›  技术社区  ›  Uri Goren

ASP.Net Web API中的消息队列

  •  7
  • Uri Goren  · 技术社区  · 11 年前

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

    SPA的功能之一包括上传大的CSV文件,在服务器上进行处理,并将输出返回给用户。

    显然,这种计算无法在线完成,因此我实现了一个负责接收文件的UploadController和一个负责在计算完成时通知用户的PollingController。

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

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

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

    diagram

    将高度赞赏示例

    2 回复  |  直到 11 年前
        1
  •  7
  •   Jonathan Holland    11 年前

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

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

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

    在.NET中最流行的框架是 NServiceBus 然而,它最近变得商业化了。您也可以查看 MassTransit ,尽管这本书的文档很差。

    您要执行的工作流:

    • MVC应用程序接受上传并将其放置到windows服务可访问的某个目录中
    • MVC应用程序发布“UploadReady”消息。
    • 服务接收消息,处理文件,并更新轮询控制器的某些状态。
    • 轮询控制器监视此状态是否发生更改。通常是数据库记录等。

    使用这样的框架的好处是,如果您的服务中断或重新部署,任何处理都可以排队并恢复,这样您就不会有任何停机时间。

        2
  •  5
  •   Andrei    11 年前

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

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

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