关于如何组织后台队列操作的文章

现在我正在思考如何组织系统架构。 该系统将由网站组成,用户可以在其中上传一些文档然后将其处理回来,并且一些后台守护程序具有应该处理提供的文档的任务队列。

我的问题是:我应该实现我上面告诉你的守护进程,作为只有命名管道的WCF服务(不需要netowork访问这个服务)?

有关于此的任何建议/提示/建议吗?

用户可以提供的数据只是一堆XML文件。 ASP.NET网站将公开获取此XML文件的function,然后以某种方式应该能够将它们传递给守护程序。

你能否指点我关于那个话题的一些文章。 提前致谢!


编辑后

几个小时后发现人们在这里建议的MSMQ,我对该技术的想法更多的是分布式架构(处理节点位于不同的机器上,并且通过网络在不同的计算机之间交换消息)。

目前不需要分离到独立的机器。 只有机器上有ASP.NET网站和一些处理程序。

是否有必要使用MSMQ?


编辑#2

由于我在这里使用.NET Framework,请建议仅提供与.NET兼容的内容。 这里真的没有任何选择。

如果您的部署将在单个服务器上,那么您最初的WCF服务概念可能就是这样 – 有关在IIS或Windows服务中进行托管的讨论,请参阅MSDN 。

正如@JeffWatkins所说,调用服务时要遵循的一个好方法是简单地将它传递给需要处理的磁盘上的文件位置。 处理大文件时,这将更有效。

我认为这里采用的精确方法取决于您从用户那里收到的文件的性质。 对于非常小的文件,您可能会发现从网站将它们传输到您的服务更加高效,以至于它们从不接触磁盘。 在这种情况下,您的服务将公开处理小文件时使用的其他方法。

编辑

介绍一个可以流式传输文件的条件可能是个好主意,但是对你进行一些测试很有价值,这样你就可以搞清楚:

  1. 是否值得做
  2. 流式传输与写入磁盘的最佳大小是什么

我的回答是基于你正在部署到一台机器的假设。 如果您想要更具可扩展性的东西,那么使用MSMQ将是扩展应用程序的好方法。

有关构建WCF / MSMQ演示应用程序的示例代码,请参阅MSDN 。

我设计了类似的东西。 我们使用WCF服务作为连接点,然后使用RabbitMQ排队消息。 然后,一个单独的服务与队列中的项一起工作,当任务完成时发送异步回调,因此完成WCF调用(WCF有许多内置的function来处理这个)

您可以在每一侧设置超时,或者您甚至可以选择删除WCF连接并使用异步回调来通知用户“处理已完成”我使用RabbitMQ比运行MSMQ,FYI好多了。

我没有任何链接,因为这是我们的团队提出的并且运作良好(1000 TPS与4服务器池,100%无状态) – 只是一个想法。

我会认真看看ServiceStack。 此function是内置的,您只需要进行最少的编程。 此外,如果您遇到任何问题,ServiceStack的架构非常好并且易​​于调试。

https://github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis

在相关的说明中,我的公司使用基于Web的REST api前端进行了大量异步后台处理(REST服务使用ServiceStack)。 我们使用多台机器并实现了RabbitMQ后端; 但是,RabbitMQ .NET库的设计非常糟糕且不必要地繁琐。 我重新设计了核心类来解决这个问题,但由于我们尚未将项目发布到生产环境,因此无法将它们发布到社区。

请访问http://www.devx.com/dotnet/Article/27560

这有点过时但可以给你一个开端和基本的理解。