開源地址:http://git.oschina.net/chejiangyi/Dyd.BaseService.TaskManager
.net 任務調度平台
用於.net dll,exe的任務的掛載,任務的隔離,調度執行,訪問權限控制,監控,管理,日志,錯誤預警,性能分析等。
1) 平台基於quartz.net進行任務調度功能開發,采用C#代碼編寫, 支持corn表達式和第三方自定義的corn表達式擴展。
2) 架構以插件形式開發,具有良好的功能擴展性,穩定性,簡單性,便於第三方開發人員進一步進行功能擴展。
3) 支持多節點集群,便於集群服務器的資源有效分配,任務的相互隔離。
4) 支持郵件形式的錯誤預警,便於運維及時處理任務異常等。
開源相關群: .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", "[email protected]"); 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後端部分截圖及安裝