.Net 网站中使用的 Quartz 调度程序

Posted

技术标签:

【中文标题】.Net 网站中使用的 Quartz 调度程序【英文标题】:Quartz Scheduler used in .Net Website 【发布时间】:2014-05-28 16:17:31 【问题描述】:

大家好,***ers,

我目前正在尝试集成一种方法来安排一些数据库检查和面向数据库的操作,这些操作将在每天凌晨 01:00 左右进行并在夜间处理。我偶然发现了 .NET Library Quartz,它似乎可以满足我的需求,但我可能又错了。

我花时间阅读了他们的文档,但我还有一些问题。他们似乎没有涵盖这个库在网站环境中的集成(据我所见,它主要是控制台驱动的应用程序)。

1) 关于网站集成,我看到了一些代码,其中初始化是在 Global.cs 文件的 Application_Start 事件中完成的。这似乎满足了我的需求,但话又说回来,这是否意味着:每次用户/访问者访问我的网站时,都会创建一个新的调度程序实例?

Application_Start 和 Application_End 方法是不代表 HttpApplication 事件的特殊方法。 ASP.NET 在应用程序域的生命周期内调用它们一次,而不是为每个 HttpApplication 实例调用一次。

Application_Start 方法在应用程序的生命周期中只被调用一次。

2) 考虑到我希望我的工作在每天上午 01:00 左右执行“仅一次”但我不确定我是否完全理解调度进程以不断运行而不停止的概念。 Quartz 真的是我需要使用的吗?

3) 假设我的网站处于闲置状态,两周内没有人访问它(我知道这有点牵强)。如果我使用 Quartz,我的流程还会每天执行吗?

我不知道这些问题是否含糊不清,我不希望(也不希望)有人给我完整的解决方案,但我只需要指导和知识来让我了解从哪里开始.

谢谢!

【问题讨论】:

【参考方案1】:

1) 关于网站集成,我看到了一些代码,其中初始化是在 Global.cs 文件的 Application_Start 事件中完成的。这似乎接近了我的需求,但话又说回来,这是否意味着:每次用户/访问者访问我的网站时,都会创建一个新的调度程序实例? 答案: 你已经给出了答案

The Application_Start and Application_End methods are special methods that do not represent HttpApplication events. ASP.NET calls them once for the lifetime of the application domain, not for each HttpApplication instance.

The Application_Start method is called only one time during the life cycle of an application

应用程序启动只被调用一次,因此您的调度程序不会有多个实例

2) 考虑到我希望我的工作在每天上午 01:00 左右执行“仅一次”但我不确定我是否完全理解调度进程以不断运行而不停止的概念。 Quartz 真的是我需要使用的吗?

答案:如果您不想使用基于 sql 的调度程序或设置计时器,Quartz.net 是最好的选择

3) 假设我的网站处于闲置状态,两周内没有人访问它(我知道这有点牵强)。如果我使用 Quartz,我的流程还会每天执行吗?

答案:调度程序将继续工作,无论会话访问您的应用程序(一旦触发),直到并且除非您停止 IIS

【讨论】:

您好 Karthik,感谢您的回答。因此,如果我总结一下:应用程序启动事件是我需要放置我的代码以使其执行。无论有多少人访问我的网站,它都会启动一次。除非 IIS 中的应用程序重新启动或停止,否则它将每天继续运行和处理。对吗? 太棒了!然后我将立即开始编码和测试!非常感谢你的帮助!我会将您的答案标记为已接受!

以上是关于.Net 网站中使用的 Quartz 调度程序的主要内容,如果未能解决你的问题,请参考以下文章

Quartz.Net 调度程序在 Azure 中不起作用

TopShelf+Quartz.net实现基于window服务的定时调度

如何在 asp.net MVC 中创建定时调度程序?

windows任务调度程序和hangfire(或Quartz.net)有啥区别? [关闭]

(VIP-朝夕教育)2021-06-06 .NET高级班 40-QuartZ任务调度的使用

Quartz.net开源作业调度框架使用详解