文章目錄
使用 Quartz.NET 來進行 Schedule Job
最近有個舊專案 (.NET Core 2.1) 需要增加功能,升級 framework 是絕對必要的,只是其中一段用來執行每天更新 cache 的背景作業引起了我的興趣,我忘記為什麼當時沒有引用其他套件 (Hangfire
,Quartz.NET
…) 來達成定期執行的目的,但持續以來運作地也滿好的,不過因為需求單純,打算趁著這個機會想要來比較幾個套件與原生做法的優劣,今天輪到 Quartz.NET
需求:
- 程式啟動先執行一次快取更新
- 每日 GMT +8 00:00 執行快取更新
所有工具使用筆記在此:
- 使用原生 HostedService 來進行 Schedule Job
- 使用 Hangfire 來進行 Schedule Job
- 使用 Quartz.NET 來進行 Schedule Job”
- 使用 Coravel 來進行 Schedule Job
基本環境說明
- macOS Ventura 13.4.1
- .NET SDK 6.0.400
- JetBrains Rider 2023.1.4
NuGet library
- Quartz 3.6.3
- Quartz.AspNetCore 3.6.3
更新 cache 的 code:
UpdateCacheService.cs
public class UpdateCacheService { private readonly ILogger<UpdateCacheService> _logger; public UpdateCacheService(ILogger<UpdateCacheService> logger) { _logger = logger; } public Task GetAsync(CancellationToken cancellationToken) { _logger.LogInformation("Get Data for cache"); //update cache return Task.CompletedTask; } }
設定步驟
安裝 NuGet 套件
Quartz
Install-Package Quartz --version 3.6.3
Quartz.AspNetCore
Install-Package Quartz.AspNetCore --version 3.6.3
建立 Job
註冊 Quartz
將 Quartz 註冊為 HostedService
builder.Services.AddQuartzHostedService(opt => { opt.WaitForJobsToComplete = true; });
心得
架構比起其他套件複雜些,原以為有其他套件的經驗,應該是駕輕就熟,想不到使用方式不太一樣,另外 Cron Expression 只能吃六碼覺得不太便民
- 優點:彈性?
- 缺點:架構複雜、文件雜亂
完整程式碼:yowko/quartz_netdemo
所有工具使用筆記在此:
- 使用原生 HostedService 來進行 Schedule Job
- 使用 Hangfire 來進行 Schedule Job
- 使用 Quartz.NET 來進行 Schedule Job”
- 使用 Coravel 來進行 Schedule Job
參考資訊
文章作者 Yowko Tsai
上次更新 2023-08-07
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。