.net 簡單任務調度平臺
.net 簡單任務調度平臺
用于.net dll,exe的任務的掛載,任務的隔離,調度執行,訪問權限控制,監控,管理,日志,錯誤預警,性能分析等。
1) 平臺基于quartz.net進行任務調度功能開發,采用C#代碼編寫, 支持corn表達式和第三方自定義的corn表達式擴展。
2) 架構以插件形式開發,具有良好的功能擴展性,穩定性,簡單性,便于第三方開發人員進一步進行功能擴展。
3) 支持多節點集群,便于集群服務器的資源有效分配,任務的相互隔離。
4) 支持郵件形式的錯誤預警,便于運維及時處理任務異常等。
-- 車江毅 2015-06-17
Dyd.BaseService.TaskManager源碼部署須知:
- 1、刪除各個項目中Newtonsoft.Json.dll的引用
- 2、檢查各項目中XXF.dll的引用,確保引用了“引用”文件夾中的XXF.dll
- 3、執行,建模腳本.txt中的sql server腳本語句
- 4、【Dyd.BaseService.TaskManager.Web】 任務管理后臺,部署此站點,修改web.config數據庫的字符串連接
- 5、修改登錄代碼和用戶權限(看源碼),不用源碼內部通過crm登錄
- 6、【Dyd.BaseService.TaskManager.MonitorTasks】 監控任務,此任務需要重新生成,打包此此文件(原有的打包文件可以直接刪除)
- 7、【Dyd.BaseService.TaskManager.WinService】 進行服務安裝,修改安裝包的實際路徑
- 8、管理后臺,可以正常訪問后,請參照 “任務調度平臺安裝->任務調度平臺部署流程(示例).xls”,來新建任務,調通任務可以正常進行,則為成功 (感謝俞忠亮同學整理)## 開源相關群: .net 開源基礎服務 238543768 ## (大家都有本職工作,也許不能及時響應和跟蹤解決問題,請諒解。)
任務demo示例
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Dyd.BaseService.TaskManager.Demo { /// <summary> /// 任務調度平臺 任務插件的寫法demo及說明 /// </summary> public class DemoTask : XXF.BaseService.TaskManager.BaseDllTask { /// <summary> /// 任務調度平臺根據發布的任務時間配置,定時回調運行方法 /// 開發人員的任務插件必須要重載并該方法 /// </summary> public override void Run() { /* * this.OpenOperator 用于任務調度平臺提供給第三方使用的所有api接口封裝 */ /*獲取當前任務dll安裝目錄*/ this.OpenOperator.GetTaskInstallDirectory(); /*打印一條日志到任務調度平臺,因為日志會存到平臺數據庫,所以日志要精簡,對任務出錯時有分析價值【注意:不要頻繁打印無用的,非必要的,對分析無價值的日志信息】*/ this.OpenOperator.Log("這里打印一條日志到任務調度平臺"); /*打印一條錯誤到任務調度平臺,因為日志會存到平臺數據庫,所以日志要精簡,對任務出錯時有分析價值【注意:不要頻繁打印無用的,非必要的,對分析無價值的日志信息】 *后續任務會有增加優先級區分,根據任務的優先級,錯誤的出現頻率等,錯誤日志會定期推送到開發者郵箱和短信*/ this.OpenOperator.Error("這里打印一條錯誤日志到任務調度平臺", new Exception("錯誤msg信息")); /*從數據庫獲取任務的臨時數據,臨時數據以jason的形式保存在數據庫里面,便于任務上下文的恢復和信息傳遞【注意:不應用于"頻繁的"存儲"大量的"臨時數據,會操作網絡耗時和數據庫性能差】*/ var databasetempinfo = this.OpenOperator.GetDataBaseTempData<DemoTaskDatabaseTempInfo>(); if (databasetempinfo == null)//若任務第一次運行,可能沒有臨時數據。當然也可以在發布任務的時候配置臨時數據也可。 { databasetempinfo = new DemoTaskDatabaseTempInfo(); databasetempinfo.LastLogID = 0; } /*將任務的臨時數據持久化到數據庫中,臨時數據以json的形式保存在數據庫里面,便于任務上下文的恢復和信息傳遞【注意:不應用于"頻繁的"存儲"大量的"臨時數據,會操作網絡耗時和數據庫性能差】 若臨時數據用于下一次使用,必須要執行此方法,否則下次無法獲取【注意:執行此方法,當前臨時數據有可能被重置為null,便于內存資源釋放】*/ this.OpenOperator.SaveDataBaseTempData(databasetempinfo); /*從本地安裝目錄中獲取任務的臨時數據,臨時數據以jason的形式保存在本地,便于任務上下文的恢復和信息傳遞【注意:本地臨時數據一般用于保存"大量的"臨時數據】*/ var localtempinfo = this.OpenOperator.GetLocalTempData<DemoTaskLocalTempInfo>(); if (localtempinfo == null)//若任務第一次運行,可能沒有臨時數據。當然也可以在發布任務的時候上傳臨時數據json至安裝壓縮包中也可。 { localtempinfo = new DemoTaskLocalTempInfo(); localtempinfo.file = new byte[0]; } /*將任務的臨時數據持久化到本地安裝目錄中,臨時數據以json的形式保存在本地安裝目錄里面,便于任務上下文的恢復和信息傳遞【注意:本地臨時數據一般用于保存"大量的"臨時數據】 若臨時數據用于下一次使用,必須要執行此方法,否則下次可能無法獲取【注意:執行此方法,當前臨時數據有可能被重置為null,便于內存資源釋放】*/ this.OpenOperator.SaveLocalTempData(localtempinfo); { string msg = "執行業務中...."+ this.AppConfig["sendmailhost"]; Debug.WriteLine(msg); System.IO.File.AppendAllText(this.OpenOperator.GetTaskInstallDirectory()+"業務.txt", msg); } } /// <summary> /// 開發人員自測運行入口 /// 需要將項目配置為->控制臺應用程序,寫好Program類和Main入口函數 /// </summary> public override void TestRun() { /*測試環境下任務的配置信息需要手工填寫,正式環境下需要配置在任務配置中心里面*/ this.AppConfig = new XXF.BaseService.TaskManager.SystemRuntime.TaskAppConfigInfo(); this.AppConfig.Add("sendmailhost", "smtp.163.com"); this.AppConfig.Add("sendmailname", "fengyeguigui@163.com"); this.AppConfig.Add("password", "******"); base.TestRun(); } } /// <summary> /// 任務調度平臺之臨時數據信息,用于任務上下文的信息傳遞。 /// 將會以json形式保存在任務調度平臺數據庫中,便于下一次回調運行時恢復并使用。【注意:不應用于"頻繁的"存儲"大量的"臨時數據,會操作網絡耗時和數據庫性能差】 /// </summary> public class DemoTaskDatabaseTempInfo { public int LastLogID { get; set; } } /// <summary> /// 任務調度平臺之臨時數據信息,用于任務上下文的信息傳遞。 /// 將會以json形式保存在任務調度平臺本地安裝文件夾中,便于下一次回調運行時恢復并使用。【注意:本地臨時數據一般用于保存"大量的"臨時數據】 /// </summary> public class DemoTaskLocalTempInfo { public byte[] file { get; set; } } }
web后端部分截圖及安裝
未來構想:
- 1) 任務故障轉移: 檢測到任務持續故障n次或者故障頻率,判定進行異地節點/節點集群內的任務啟動,可支持n次故障恢復。
- 2)任務負載均衡: 多個任務并行執行,用于高資源負載任務的多節點運行。
- 3)任務拆分: 一個父級任務可以創建多個子任務,并對任務進行管理,調度,故障恢復,預警等。
項目地址: https://github.com/chejiangyi/Dyd.BaseService.TaskManager
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!