我正在尝试用C#开发一个长期运行的数据馈送程序。数据处理将在多个服务器上运行,并且就像一种长时间运行的队列,一旦完成上一个文档的处理,数据将被输入数据处理软件。
我该怎么做?它可能会处理分散到5个单独服务器中的10,000个文档,并且将使用服务器是否繁忙以及服务器已经处理了多少文档来分发文档。通常的负载平衡标准。我可以编写一个Windows应用程序,它将持续监视服务器并相应地提供/发送数据。我应该使用WCF服务吗? windows表单应用程序? Windows消息队列还是应该构建自己的消息队列?数据馈送将基本上继续进行,因为每个单独的文档可能需要20-30分钟,并且有1万个文档。我不希望喂食程序在任何情况下都会崩溃/停止。
您将使用哪种软件和方法来开发此功能?任何指针,猜测和想法?
答案 0 :(得分:0)
您应该使用Windows服务(Visual Studio中的Windows应用程序):
Walkthrough: Creating a Windows Service Application in the Component Designer
如果在控制面板中配置它们,即使没有用户登录,它们也会在操作系统启动时启动。还有必要使用有权访问必须读取/的文件的帐户启动服务写。您可以专门为此创建一个帐户。
Windows service(这解释了如何做前一段的事情)
绝对必要的是你捕获所有异常,因为一个简单的未处理异常会突然停止服务。
您可以使用多种方法对作业进行排队,但我建议您使用像数据库表一样简单的方法。此表可以包含定义作业所需的列,还有一个列,用于将进程标记为pending / started / succesfullyFinished / finishedWithEroor以及所有与之相关的额外信息(开始和结束时间,处理计算机等) 。您应该通过事务保护获取下一个挂起作业的操作,并将其设置为服务器启动,以避免服务器之间发生冲突。
您不应该进行复杂的负载平衡过程。如果你真的需要,你可以将线程优先级设置为低级别,这样就不会减慢其他进程的速度。