在 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
有幸拜讀大學長的文章
回覆刪除