文章目錄
使用 Coravel 來進行 Schedule Job
最近有個舊專案 (.NET Core 2.1) 需要增加功能,升級 framework 是絕對必要的,只是其中一段用來執行每天更新 cache 的背景作業引起了我的興趣,我忘記為什麼當時沒有引用其他套件 (Hangfire
,Quartz.NET
…) 來達成定期執行的目的,但持續以來運作地也滿好的,不過因為需求單純,打算趁著這個機會想要來比較幾個套件與原生做法的優劣,今天輪到 Coravel
需求:
- 程式啟動先執行一次快取更新
- 每日 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
- Coravel 4.2.1
更新 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; } }
設定步驟
安裝
Coravel
dotnet add package coravel --version 4.2.1
註冊 Coravel:
Program.cs
builder.Services.AddScheduler();
設定排程
方法 1:使用
Invocables
(官方推薦)a. 建立
Invocables
:UpdateCacheJob.cs
b. 註冊
Invocables
scope 是
Transient
,但官網上沒有說明原因,我用 Singleton 也正常builder.Services.AddTransient<UpdateCacheJob>();
c. 設定
Invocables
排程
方法 2:直接呼叫方法
心得
Coravel 的官網文件還沒更新到 .NET 6 的版本,說明也略少,但大致上簡潔明瞭
- 優點:設定上很直覺、文件說明簡單明瞭
- 缺點:預設會吞掉 exception,也無法 re-throw、文件說明簡單明瞭XD (有的地方真的簡單到不知道為什麼)
完整程式碼:yowko/coraveldemo
所有工具使用筆記在此:
- 使用原生 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 台灣 授權條款 釋出。