前言
在 ASP.NET 中常见的排程框架不外乎 Quartz.NET 与 Hangfire 两种,过去自己在开发上比较常用到 Hangfire 搭配其后台管理介面,在使用上可以说是相当方便与容易上手,最近在新专案也有遇到 schedule 的需求,同事大推 Quartz.Net 来担任工作排程器的工作,Quartz.Net 是一套功能齐全的工作排程框架,由 Java 热门的排程框架 Quartz 移植到 .NET 上,open source 且提供弹性的设定让开发者使用,在新版 3.0.7 支援 .NET Core 2.1 版本,今天就来简单介绍 Quartz.NET 的安装与基本应用使用,若有问题或是错误的地方欢迎各位高手给予指导。
安装
首先,先建立一个名称为 QuartzNetConsole 的 Console 专案,接著开启 Nuget Package Mnage 输入 “quartz” 搜寻,安装目前最新版的 Quartz.NET 套件

或是在 Nuget Package Console 输入指令
Install-Package Quartz
如果有 Json 序列化需求,也可以一併加入 Quartz.Serialization.Json
使用
在使用前先介绍 Quartz.Net 中的几个重要 API 与 Interface
-
IScheduler: 主要工作排程 API、透过 Start 方法 run 排程。 -
JobBuilder、IJobDetail: 透过JobBuilder.Create产生IJobDetail的Instance。 -
TriggerBuilder、ITrigger: 透过TriggerBuilder.Create产生ITrigger的Instance。
IJob : 自定义的排程类别要实作的 Interface
简单整理关係图如下

.png)]
接著在 Console 专案 Program.cs 中的 Main 加入下列代码
class Program
{
static void Main(string[] args)
{
// trigger async evaluation
RunProgram().GetAwaiter().GetResult();
}
private static async Task RunProgram()
{
try
{
// 建立 scheduler
StdSchedulerFactory factory = new StdSchedulerFactory();
IScheduler scheduler = await factory.GetScheduler();
// 建立 Job
IJobDetail job = JobBuilder.Create<ShowDataTimeJob>()
.WithIdentity("job1", "group1")
.Build();
// 建立 Trigger,每秒跑一次
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(1)
.RepeatForever())
.Build();
// 加入 ScheduleJob 中
await scheduler.ScheduleJob(job, trigger);
// 启动
await scheduler.Start();
// 执行 10 秒
await Task.Delay(TimeSpan.FromSeconds(10));
// say goodbye
await scheduler.Shutdown();
}
catch (SchedulerException se)
{
await Console.Error.WriteLineAsync(se.ToString());
}
}
}
其中要执行的 ShowDataTimeJob 类别代码如下
internal class ShowDataTimeJob :IJob
{
public async Task Execute(IJobExecutionContext context)
{
await Console.Out.WriteLineAsync($"现在时间 {DateTime.Now}");
}
}
程式说明
-
建立 scheduler : 透过
factory.GetScheduler()取得schedule -
建立
Job: 使用JobBuilder.Create建立ShowDataTimeJob,并定义其 key 与 group 名称 -
建立
Trigger: 使用TriggerBuilder建立ITrigger,定义其 key 与 group 名称,并设置立即执行执行时间为每一秒执行一次,其中ShowDataTimeJob的Execute就是此执行。执行结果如下:

感想
上透过简单的说明与操作,就可以快速的建立出 Quartz.NET 工作排程的功能,但其实在现实生活中的需求及实现的代码往往都不会那麽简单,如果有兴趣可以先参考官方网站的开发说明文件,日后如果遇到在分享给各位,Happy Coding 😃。
另外,Quartz.Net 也能搭配其他套件将设定档设定 XML 档中,甚至也能将够搭配一点手做精神,手刻一些代码后将设定档放置在 YAML 档中,方便配置。此外,JOB 的定义及执行的週期也能够透过安装其它套件,将其存放在 SQL Server 或是 Redis 中,得到更弹性的配置。又或者,能够像设定档一下放置在 YAML 档案中。
本文介绍了如何在ASP.NET中使用Quartz.NET进行工作排程,包括安装步骤、关键API的使用和实际示例。重点讲解了IScheduler、JobBuilder、TriggerBuilder等核心组件,并提到了Quartz.NET的灵活性和可扩展性。
1982

被折叠的 条评论
为什么被折叠?



