长时间运行的程序和数据处理
本文关键字:数据处理 程序 运行 长时间 | 更新日期: 2023-09-27 18:31:30
我正在尝试用 C# 开发一个长时间运行的数据馈送程序。数据处理将在多个服务器上运行,并且会像一种长时间运行的队列,一旦前一个文档的处理完成,数据将被输入数据处理软件。
我应该怎么做?它可能会处理分布在大约 5 个单独服务器中的 10,000 个文档,并且将使用服务器是否繁忙以及服务器已经处理了多少文档来分发文档。通常的负载平衡标准。我可以编写一个Windows应用程序,该应用程序将持续监视服务器并相应地提供/发送数据。我应该使用 WCF 服务吗?窗口窗体应用程序?Windows 消息队列还是应该构建自己的消息队列?数据馈送基本上会持续进行,因为每个单独的文档可能需要 20-30 分钟,并且有 10,000 个文档。我不希望喂食程序基本上在任何情况下崩溃/停止。
您将使用哪种软件和方法来开发它?有什么指示、猜测和想法吗?
你应该使用Windows Services(Visual Studio中的一种Windows应用程序):
演练:在组件设计器中创建 Windows 服务应用程序
如果在控制面板中配置它们,它们将在操作系统启动时启动,即使没有用户登录也是如此。您还必须使用具有访问必须读/写的文件的权限的帐户启动服务。您可以专门为此创建一个帐户。
Windows服务(这解释了如何做上一段的事情)
绝对必要的是捕获所有异常,因为一个简单的未经处理的异常会突然停止服务。
您可以使用多种方法来对作业进行排队,但我建议您使用像数据库表这样简单的东西。此表可以包含定义作业 difine 所需的列,也可以包含将流程标记为挂起/已开始/成功完成/已完成与 Eroor 相关的所有额外信息(开始和结束时间、处理计算机等)。您应该使用事务保护获取下一个挂起作业并将其设置为由服务器启动的操作,以避免服务器之间的冲突。
您不应该进行复杂的负载平衡过程。 如果确实需要,可以将线程优先级设置为较低级别,以免减慢其他进程的速度。