在 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

接著在 Console 專案 Program 啟動加入下列代碼
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}");
}
}
程式說明
感想
以上透過簡單的說明與操作,就可以快速的 Demo 出 Quartz.NET 工作排程的功能,但其實在現實生活中代碼往往都不會那麼簡單,如果有興趣可以先參考官方網站的開發說明文件,日後如果遇到在分享給各位,Happy Coding :)
參考
ASP.NET 程式中的背景工作 (3) - 使用 Quartz.NET
Quartz.NET Quick Start Guide



有幸拜讀大學長的文章
回覆刪除