此篇文章主要帶大家利用 .NET Core 實作 Worker Service ,有興趣就往下看吧!
Worker Service 是 .NET Core 3.0 時釋出的新功能,官方也有釋出一專案範本(Template)供開發者去使用,讓開發者可以快速發展自己所需的背景服務!
❗ 一般來說 Worker Service 會被用來執行需要長時間處理或定期需要做的事情!
(其實就有點像 Windows 平台上的 Windows Service、Linux 平台上的 Daemon Service)
舉幾個例子:
❤️ 若搭配一些已有的排程套件(ex. Coravel),就可以讓 Worker Service 客製批次工作更加彈性化!
除上面所述之外,既然是從 .NET Core 衍生出來的功能,那它當然也有保留原有那些被大幅簡化的特徵(日誌、依賴注入、組態設定…等等),好 Worker Service 不用嗎? _(:3 ⌒゙)_
1️⃣ 建立 WorkerServiceDemo 專案
dotnet new worker -n WorkerServiceDemocd WorkerServiceDemo
以上做完,最基本可運行的 Worker Service 就做完了,真的不唬(◔౪◔)...
2️⃣ 接著簡單運行一下看看!
dotnet run WorkerServiceDemo.csproj
有看到以下畫面,就表示成功囉!
就是以 .NET Core 為基底的專案呀,不是錯覺(◔౪◔)...
❗ 關鍵差在使用了 Microsoft.Extensions.Hosting 套件,考試會考很重要?!
該套件含有 IHostedService 介面,後續會再提及該介面為什麼很關鍵~
. . .
先看 Worker 類別好了…
其實官方文件也描述得蠻清楚了,這個 BackgroundService 類別就是繼承了 IHostedService 及 IDisposable 介面,而開發者一定要覆寫的方法為 ExecuteAsync ,其餘 StartAsync、StopAsync、Dispose 等方法可視需求覆寫,但切記覆寫完最後依然要呼叫父類別方法哦!
. . .
接著來看 Program 類別…
需要於 ConfigureServices 中註冊所需的託管服務(有繼承 IHostedService 介面),以圖片為例就是 Worker 類別!
所以你/妳現在知道它的來龍去脈了嗎?當然若你/妳想了解更深入可以看看官方文件或已開源的程式碼唷~
那如果我們想把已經寫好的 Worker Service 轉換為可以在 Windows 執行的服務,該怎麼做呢?
只要於專案新增 Microsoft.Extensions.Hosting.WindowsServices 套件就行了…
dotnet add package Microsoft.Extensions.Hosting.WindowsServices
接著在 Program 類別 CreateHostBuilder 處加上 UseWindowsService(),完工!
部署為 Windows 服務的語法可參考如下:
rem Build and Publish Applicationdotnet builddotnet publish -c Release -o "PathToPublish"rem Create ServiceName Servicesc.exe create ServiceName binpath="PathToPublish\ServiceName.exe"
這邊在附上一些控制服務的語法可參考如下:
rem Start ServiceName Servicesc.exe start ServiceNamerem Stop ServiceName Servicesc.exe stop ServiceNamerem Query ServiceName Service Statussc.exe query ServiceNamerem Delete ServiceName Servicesc.exe delete ServiceName
那如果我們想把已經寫好的 Worker Service 轉換為可以在 Linux 執行的服務,該怎麼做呢?
只要於專案新增 Microsoft.Extensions.Hosting.Systemd 套件就行了…
dotnet add package Microsoft.Extensions.Hosting.Systemd
接著在 Program 類別 CreateHostBuilder 處加上 UseSystemd(),完工!
至於部署為 Linux 服務的語法這部分我就沒有特別去深入了解了,之後如果有碰到我可能再回來補囉...
可參考範例專案…
⭐ Upgrade net core2.2 app to net core3.1 as worker service
⭐ Introduction to Worker Services in .NET Core 3.0
⭐ Creating a Worker Service in ASP .NET Core 3.0
⭐ WHAT ARE .NET WORKER SERVICES?
⭐ [NETCore] ASP.NET Core 3.0 Worker Service 搭配 Coravel 建立排程服務
因為自己本身平常幾乎都是在 Windows 上開發,所以對於 .NET 的 Windows Service 不是很陌生,但那時候就覺得要部署一個 Windows Service 怎麼這麼麻煩...
而且視專案狀況,有可能會很肥(佔硬碟容量),更何況是若管理不慎,甚至會影響整台主機效能!
好奇研究了一下 .NET Core 3 釋出的 Worker Service,結果好像就回不去了_(:3 」∠ )_
Worker Service 簡單且省力,趕緊來試試看吧!
本文章也曾發表於我的 Blog 中,歡迎到裡面查查我其他分享的文章哦!