Quartz.net基于数据库的任务调度管理(Only.Jobs)
一 前言:
各大調(diào)度組件優(yōu)缺點在這就不討論了,使用Quartz.net是因為它可以執(zhí)行秒級任務(wù)。
Only.Jobs 項目通過將各Job存儲在數(shù)據(jù)庫中,啟動一個專門的Job管理任務(wù)來循環(huán)調(diào)度各Job的的調(diào)度情況。
?
項目分為 Web管理系統(tǒng) ?、服務(wù)運行端 ? 、數(shù)據(jù)提供邏輯處理層?
數(shù)據(jù)訪問使用了?SqlSugar?4.1.1.5版本,目前支持MySql、SqlServer
采用Quartz.net+Topshelf ?可安裝為windows服務(wù)。?
二 項目結(jié)構(gòu):
一一介紹下:
Only.Jobs.Items 下是創(chuàng)建的測試Job項目。
Only.Jobs ?是一個調(diào)度服務(wù)項目,集成了Topshelf,可安裝成windows服務(wù)。
Only.Jobs.Core ?是項目的核心層,對外提供數(shù)據(jù)操作。
Only.Jobs.Web 為調(diào)度任務(wù)的管理和狀態(tài)監(jiān)控管理系統(tǒng)。
先來看下總體效果吧
運行Only.Jobs.Web項目:
?
?
在任務(wù)管理模塊可停止、啟用各Job.
?
三 表結(jié)構(gòu)介紹
BackgroundJob ?為任務(wù)信息存儲表
BackgroundJobLog 為任務(wù)執(zhí)行跟蹤日志表?
四 實現(xiàn)介紹
通過任務(wù)管理模塊將開發(fā)好的Job所在的項目配置起來,存儲到BackgroundJob表中。
在Only.Jobs項目中創(chuàng)建ManagerJob 類,Job調(diào)度任務(wù)管理。
[DisallowConcurrentExecution]
? ? public class ManagerJob : IJob
? ? {
? ? ? ? private readonly ILog _logger = LogManager.GetLogger(typeof(ManagerJob));
? ? ? ? public void Execute(IJobExecutionContext context)
? ? ? ? {
? ? ? ? ? ? Version Ver = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
? ? ? ? ? ? _logger.InfoFormat("ManagerJob Execute begin Ver." + Ver.ToString());
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? new QuartzManager().JobScheduler(context.Scheduler);
? ? ? ? ? ? ? ? _logger.InfoFormat("ManagerJob Executing ...");
? ? ? ? ? ? }
? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? JobExecutionException e2 = new JobExecutionException(ex);
? ? ? ? ? ? ? ? e2.RefireImmediately = true;
? ? ? ? ? ? }
? ? ? ? ? ? finally
? ? ? ? ? ? {
? ? ? ? ? ? ? ? _logger.InfoFormat("ManagerJob Execute end ");
? ? ? ? ? ? }
? ? ? ? }
? ? }
JobScheduler 方法:
/// <summary>
? ? ? ? /// Job狀態(tài)管控
? ? ? ? /// </summary>
? ? ? ? /// <param name="Scheduler"></param>
? ? ? ? public void JobScheduler(IScheduler Scheduler)
? ? ? ? {
? ? ? ? ? ? List<BackgroundJobInfo> list = new BackgroundJobService().GeAllowScheduleJobInfoList();
? ? ? ? ? ? if (list != null && list.Count > 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? foreach (BackgroundJobInfo jobInfo in list)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? JobKey jobKey = new JobKey(jobInfo.BackgroundJobId.ToString(), jobInfo.BackgroundJobId.ToString() + "Group");
? ? ? ? ? ? ? ? ? ? if (Scheduler.CheckExists(jobKey) == false)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if (jobInfo.State == 1 || jobInfo.State == 3)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ScheduleJob(Scheduler, jobInfo);
? ? ? ? ? ? ? ? ? ? ? ? ? ? if (Scheduler.CheckExists(jobKey) == false)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 0);
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 1);
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? else if (jobInfo.State == 5)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 0);
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if (jobInfo.State == 5)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? Scheduler.DeleteJob(jobKey);
? ? ? ? ? ? ? ? ? ? ? ? ? ? new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 0);
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? else if (jobInfo.State == 3)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 1);
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
其他的簡單的就不在這描述了。
接下來看下運行效果:
啟動Only.Jobs項目
??
僅僅是一個工具項目而已,大家可盡管仍磚頭過來。代碼已上傳github https://github.com/mamingbo/Only.Jobs ?歡迎下載使用。
相關(guān)文章:
基于Quartz.net 的開源任務(wù)管理平臺
使用sqlserver搭建高可用雙機熱備的Quartz集群部署【附源碼】
開源任務(wù)管理平臺TaskManager介紹
原文地址:http://www.cnblogs.com/mamingbo/p/7142057.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的Quartz.net基于数据库的任务调度管理(Only.Jobs)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: REST参考手册
- 下一篇: Visual Studio Code: