现在我正在思考如何组织系统架构。该系统将包含网站,用户可以上传一些文件,然后将其处理回来,还有一个后台守护程序,其中包含应处理提供的文档的任务队列。
我的问题是: 我应该实现我上面告诉你的守护进程,作为只有命名管道的WCF服务(不需要netowork访问此服务)?
有关于此的任何建议/提示/建议吗?
用户可以提供的数据只是一堆XML文件。 ASP.NET网站将公开获取此XML文件的功能,然后以某种方式将它们传递给守护进程。
请你就这个话题的一些文章指出我。 提前谢谢!
经过几个小时发现人们在这里建议的MSMQ,我对该技术的想法更多的是分布式架构(处理节点位于不同的机器上,并且不同的计算机之间通过网络交换消息)。
目前不需要分离到独立的机器。只有机器上有ASP.NET网站和一些处理程序。
是否有必要使用MSMQ?
在这里使用.NET Framework时,请建议仅提供与.NET兼容的内容。这里真的没有任何选择。
答案 0 :(得分:3)
如果您的部署位于单个服务器上,那么您最初的WCF服务概念可能就是这样 - 有关在IIS或Windows服务中进行托管的讨论,请参阅MSDN。
正如@JeffWatkins所说,调用服务时要遵循的一个好方法是简单地将它传递给需要处理的磁盘上的文件位置。在处理大文件时,这将更有效。
我认为这里采用的精确方法取决于您从用户那里收到的文件的性质。对于非常小的文件,您可能会发现从网站将它们传输到您的服务更加高效,以至于它们从不接触磁盘。在这种情况下,您的服务将公开处理小文件时使用的其他方法。
修改强>
介绍一个可以流式传输文件的条件可能是一个好主意,但是对你进行一些测试很有价值,这样你就可以搞清楚:
我的回答是基于你正在部署到一台机器的假设。如果您想要更具可伸缩性的东西,那么使用MSMQ将是扩展应用程序的好方法。
有关构建WCF / MSMQ演示应用程序的示例代码,请参阅MSDN。
答案 1 :(得分:3)
我设计了类似的东西。我们使用WCF服务作为连接点,然后使用RabbitMQ排队消息。然后,一个单独的服务与队列中的项一起工作,当任务完成时发送异步回调,因此完成WCF调用(WCF有许多内置的功能来处理这个)
您可以在每一侧设置超时,或者您甚至可以选择删除WCF连接并使用异步回调来通知用户“处理已完成” RabbitMQ的运气比MSMQ,FYI好多了。
我没有任何关于你的链接,因为这是我们的团队想出的并且运作良好(1000 TPS与4服务器池,100%无状态) - 只是一个想法。
答案 2 :(得分:1)
我会认真看看ServiceStack。此功能是内置的,您只需要进行最少的编程。此外,如果您遇到任何问题,ServiceStack的架构非常好并且易于调试。
https://github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis
在相关的说明中,我的公司使用基于Web的REST api前端进行了大量异步后台处理(REST服务使用ServiceStack)。我们使用多台机器并实现了RabbitMQ后端;但是,RabbitMQ .NET库的设计非常糟糕且不必要地繁琐。我重新设计了核心类来解决这个问题,但由于我们尚未将项目发布到生产环境,因此无法将它们发布到社区。 p>
答案 3 :(得分:0)
查看http://www.devx.com/dotnet/Article/27560
它有点过时了,但可以给你一个开端和基本的理解。