.Net Core實現基於Quart.Net的任務管理
阿新 • • 發佈:2020-10-23
前段時間給公司專案升級.net框架,把原先的任務管理平臺用.net core實現,現做如下整理:
## 一、實現思路
之前的實現也是參考了部落格園中其他文章實現的思路:
1. 一個任務定義一個實現IJob介面的類,通過單獨的dll管理;
2. 通過資料庫持久化、維護任務,便於服務重啟時任務的恢復;
3. 定義一個管理任務的基礎服務,輪詢資料庫中的任務,根據任務的狀態維護任務的執行;
4. 新增任務時,需要在資料庫中新增一條記錄,並且在任務管理的dll中新增一個實現IJob的類,基礎服務通過反射dll來構建任務的例項新增到排程器中
由於業務程式碼會頻繁調整,我們業務程式碼從任務執行中拆分出來,獨立部署成http服務,任務的執行就是呼叫一個http請求,這樣不同的任務就是請求的url不一樣,檢視官方文件( https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/more-about-jobs.html#job-instances )發現,我們可以通過只建立一個基礎任務類,建立多個該任務類的例項來實現構建多個任務,IJobDetail中可以用JobDataMap物件來儲存Job例項的引數,所以我們通過JobDataMap將請求url傳遞到任務的Execute()方法中,我們只需要在資料庫中補充任務請求的url資訊就可以了,不需要單獨的dll去定義任務。
## 二、專案結構
根據上面思路,我們只需要一個管理任務的基礎服務、一個Web管理平臺就可以實現,為了保持專案簡單,把任務管理無關的功能合併在一個專案裡,並且儘量排除無關的框架和功能點,最終程式包含3個專案:
1. JobManage.Service:控制檯程式,管理任務的基礎服務,通過Topshelf部署成windows服務,如何部署參考: https://www.cnblogs.com/podolski/p/10054286.html
2. JobManage.Web:Web應用程式,管理平臺,新增、暫停、恢復、刪除任務,檢視任務執行日誌;
3. JobManage.Core:類庫,提供業務基礎服務,如資料庫操作等
動態新增任務:
```
IJobDetail jobDetail = JobBuilder.Create