设计建议,用于执行将根据配置触发的任务

时间:2012-07-23 11:42:24

标签: c# oop design-patterns

在我的网络应用程序中,有一个显示某些字段及其值的网页。用户可以编辑这些值。编辑值后,它们将持久保存到数据库中。现在出现了我需要建议的问题。将值更新到DB后,我需要运行一些耗时的模块。因此,根据配置,这个耗时的部分可能会或可能不会立即完成。配置中的选项可以是瞬时,每小时,每日,每周或每月。因此,如果它瞬间我必须运行模块,否则我应该根据配置在指定的时间触发任务。

是作业调度程序,解决这个问题的好方法吗?听说过Quartz.NET。是否有任何.NET库可用于实现此目的。请提供建议。

1 个答案:

答案 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构建您自己的托管服务。