在我的网络应用程序中,有一个显示某些字段及其值的网页。用户可以编辑这些值。编辑值后,它们将持久保存到数据库中。现在出现了我需要建议的问题。将值更新到DB后,我需要运行一些耗时的模块。因此,根据配置,这个耗时的部分可能会或可能不会立即完成。配置中的选项可以是瞬时,每小时,每日,每周或每月。因此,如果它瞬间我必须运行模块,否则我应该根据配置在指定的时间触发任务。
是作业调度程序,解决这个问题的好方法吗?听说过Quartz.NET。是否有任何.NET库可用于实现此目的。请提供建议。
答案 0 :(得分:1)
建议将这些作业存储在队列中,并创建另一个异步服务来执行队列作业。因此,您不会在Web服务器(IIS)上加载所有工作,并且在Web服务器重新启动或Web应用程序重新启动的情况下,应用程序不会丢失作业。
要创建此解决方案,您需要考虑3点。
队列设计和管理
当然,您可以使用其中一个排队服务器(例如MSMQ,ActiveMQ,ZeroQ)。但为了简单起见,我建议在数据库中使用新表作为队列。在以下链接中查找如何将数据库表用作队列。 http://rusanu.com/2010/03/26/using-tables-as-queues/
作业调度
Windows Task Scheduler和QuatrZ.NET有两个选项。我建议将QuatrZ.Net用于此部件,因为它更易于定制,可以满足您的所有需求。
托管服务
您可以使用QuartZ.NET服务器部署,也可以使用.NET 4 Managed Extensibility Framework (MEF)并基于QuartZ IJob合约及其Corn expressions构建您自己的托管服务。