2017-03-06 105 views
0

我正在使用Quartz.net库的简单调度程序。 我有7个不同的触发器。顺序是这样的。Quartz.net并不总是工作

第一次:每120分钟。
第二:每12小时。
第三:每5分钟一次。
第四:每3分钟一次。
第五:每29秒。
第六:每10秒钟一次。
第七:每5秒钟一次。

你看到它有点复杂。我有这样的问题。第一触发器需要每两个小时工作一次。但经过几次运行后,它自行停止。它根本不起作用。其他人正在工作,他们没事。 我很抱歉我的英文不好。

private int bultengetir = 120; // min 
    private int baslayanmacsil = 29; //sec 
    private int kuponsonuclandir = 5;//5 min 
    private int canliorangetir = 10; //sec 
    private int canlimacgetir = 7; //sec 
    private int canlimacsil = 12;//hour 
    private int videoeslestir = 3; //min 

    private DateTimeOffset g_bultengetir = DateTimeOffset.UtcNow.AddMinutes(0);//10 
    private DateTimeOffset g_baslayanmacsil = DateTimeOffset.UtcNow.AddMinutes(5);//5 
    private DateTimeOffset g_canlimacgetir = DateTimeOffset.UtcNow.AddMinutes(10);//10 
    private DateTimeOffset g_canliorangetir = DateTimeOffset.UtcNow.AddMinutes(11);//55 
    private DateTimeOffset g_canlimacsil = DateTimeOffset.UtcNow.AddMinutes(12);//5 
    private DateTimeOffset g_kuponsonuclandir = DateTimeOffset.UtcNow.AddMinutes(15);//15 
    private DateTimeOffset g_videoeslestir = DateTimeOffset.UtcNow.AddMinutes(15);//7 

    public void RunJobs() 
    { 
     CanliMaclariGetir(); 
     CanliOranlariGetir(); 
     BultenGetir(); 
     BaslayanMaclariSil(); 
     CanliMaclariSil(); 
     KuponlariSonuclandir(); 
     VideoEslestir(); 
    } 
    private void BultenGetir() 
    { 
     try 
     { 
      ISchedulerFactory schfack = new StdSchedulerFactory(); 
      IScheduler scheduler = schfack.GetScheduler(); 

      IJobDetail jobdetay = JobBuilder.Create<BultenGetir>() 
       .WithIdentity("bultengetir") 
       .Build(); 
      ITrigger trigger = TriggerBuilder.Create() 
       .WithSimpleSchedule(s => s.WithIntervalInMinutes(bultengetir).RepeatForever()) 
       .StartAt(g_bultengetir) 
       .Build(); 
      scheduler.ScheduleJob(jobdetay, trigger); 
      scheduler.Start(); 
      Log log = new Log() 
      { 
       Name = "BultenGetir Görev Emri", 
       Description = "BultenGetir Görev Emri Verildi.", 
       Start = DateTime.Now, 
       Finish = DateTime.Now, 
       TotalMilliSecond = 0, 
       Type = 6 
      }; 
      DbWork db = new DbWork(); 
      db.LogEkle(log); 
     } 
     catch (Exception ex) 
     { 
      string h_mesaj = ex.Message.ToString(); 
      string icerik = ""; 
      if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
      string h_yer = ex.StackTrace.ToString(); 
      dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "BultenGetir()", DateTime.Now, h_mesaj, icerik, h_yer); 
     } 

    } 
    private void BaslayanMaclariSil() 
    { 
     try 
     { 
      ISchedulerFactory schfack = new StdSchedulerFactory(); 
      IScheduler scheduler = schfack.GetScheduler(); 

      IJobDetail jobdetay = JobBuilder.Create<BaslayanMaclariSil>() 
       .WithIdentity("baslayansil") 
       .Build(); 

      ITrigger trigger = TriggerBuilder.Create() 
       .WithSimpleSchedule(s => s.WithIntervalInSeconds(baslayanmacsil).RepeatForever()) 
       .StartAt(g_baslayanmacsil) 
       .Build(); 
      scheduler.ScheduleJob(jobdetay, trigger); 
      scheduler.Start(); 

      Log log = new Log() 
      { 
       Name = "BaslayanMaclariSil Görev Emri", 
       Description = "BaslayanMaclariSil Görev Emri Verildi.", 
       Start = DateTime.Now, 
       Finish = DateTime.Now, 
       TotalMilliSecond = 0, 
       Type = 6 
      }; 
      DbWork db = new DbWork(); 
      db.LogEkle(log); 
     } 
     catch (Exception ex) 
     { 
      string h_mesaj = ex.Message.ToString(); 
      string icerik = ""; 
      if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
      string h_yer = ex.StackTrace.ToString(); 
      dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "BaslayanMaclariSil()", DateTime.Now, h_mesaj, icerik, h_yer); 
     } 
    } 
    private void KuponlariSonuclandir() 
    { 
     try 
     { 
      ISchedulerFactory schfack = new StdSchedulerFactory(); 
      IScheduler scheduler = schfack.GetScheduler(); 

      IJobDetail jobdetay = JobBuilder.Create<KuponlariSonuclandir>() 
       .WithIdentity("kuponsonuclandir") 
       .Build(); 
      ITrigger trigger = TriggerBuilder.Create() 
       .WithSimpleSchedule(s => s.WithIntervalInMinutes(kuponsonuclandir).RepeatForever()) 
       .StartAt(g_kuponsonuclandir) 
       .Build(); 
      scheduler.ScheduleJob(jobdetay, trigger); 
      scheduler.Start(); 

      Log log = new Log() 
      { 
       Name = "KuponlariSonuclandir Görev Emri", 
       Description = "KuponlariSonuclandir Görev Emri Verildi.", 
       Start = DateTime.Now, 
       Finish = DateTime.Now, 
       TotalMilliSecond = 0, 
       Type = 6 
      }; 
      DbWork db = new DbWork(); 
      db.LogEkle(log); 
     } 
     catch (Exception ex) 
     { 
      string h_mesaj = ex.Message.ToString(); 
      string icerik = ""; 
      if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
      string h_yer = ex.StackTrace.ToString(); 
      dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "KuponlariSonuclandir()", DateTime.Now, h_mesaj, icerik, h_yer); 
     } 
    } 
    private void CanliOranlariGetir() 
    { 
     try 
     { 
      ISchedulerFactory schfack = new StdSchedulerFactory(); 
      IScheduler scheduler = schfack.GetScheduler(); 
      IJobDetail jobdetay = JobBuilder.Create<CanliOranlar>() 
       .WithIdentity("canliorangetir") 
       .Build(); 
      ITrigger trigger = TriggerBuilder.Create() 
       .WithSimpleSchedule(s => s.WithIntervalInSeconds(canliorangetir).RepeatForever()).StartAt(g_canliorangetir).Build(); 
      scheduler.ScheduleJob(jobdetay, trigger); 
      scheduler.Start(); 

      Log log = new Log() 
      { 
       Name = "CanliOranlariGetir Görev Emri", 
       Description = "CanliOranlariGetir Görev Emri Verildi.", 
       Start = DateTime.Now, 
       Finish = DateTime.Now, 
       TotalMilliSecond = 0, 
       Type = 6 
      }; 
      DbWork db = new DbWork(); 
      db.LogEkle(log); 
     } 
     catch (Exception ex) 
     { 
      string h_mesaj = ex.Message.ToString(); 
      string icerik = ""; 
      if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
      string h_yer = ex.StackTrace.ToString(); 
      dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "CanliOranlariGetir()", DateTime.Now, h_mesaj, icerik, h_yer); 
     } 
    } 
    private void CanliMaclariGetir() 
    { 
     try 
     { 
      ISchedulerFactory schfack = new StdSchedulerFactory(); 
      IScheduler scheduler = schfack.GetScheduler(); 
      IJobDetail jobdetay = JobBuilder.Create<CanliMaclar>() 
       .WithIdentity("canlimacgetir") 
       .Build(); 
      ITrigger trigger = TriggerBuilder.Create() 
       .WithSimpleSchedule(s => s.WithIntervalInSeconds(canlimacgetir).RepeatForever()).StartAt(g_canlimacgetir).Build(); 
      scheduler.ScheduleJob(jobdetay, trigger); 
      scheduler.Start(); 
      Log log = new Log() 
      { 
       Name = "CanliMaclariGetir Görev Emri", 
       Description = "CanliMaclariGetir Görev Emri Verildi.", 
       Start = DateTime.Now, 
       Finish = DateTime.Now, 
       TotalMilliSecond = 0, 
       Type = 6 
      }; 
      DbWork db = new DbWork(); 
      db.LogEkle(log); 
     } 
     catch (Exception ex) 
     { 
      string h_mesaj = ex.Message.ToString(); 
      string icerik = ""; 
      if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
      string h_yer = ex.StackTrace.ToString(); 
      dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "CanliMaclariGetir()", DateTime.Now, h_mesaj, icerik, h_yer); 
     } 
    } 
    private void CanliMaclariSil() 
    { 
     try 
     { 
      ISchedulerFactory schfack = new StdSchedulerFactory(); 
      IScheduler scheduler = schfack.GetScheduler(); 

      IJobDetail jobdetay = JobBuilder.Create<CanliSil>() 
       .WithIdentity("canlimacsil") 
       .Build(); 

      ITrigger trigger = TriggerBuilder.Create() 
       .WithSimpleSchedule(s => s.WithIntervalInHours(canlimacsil).RepeatForever()) 
       .StartAt(g_canlimacsil) 
       .Build(); 
      scheduler.ScheduleJob(jobdetay, trigger); 
      scheduler.Start(); 

      Log log = new Log() 
      { 
       Name = "CanliMaclariSil Görev Emri", 
       Description = "CanliMaclariSil Görev Emri Verildi.", 
       Start = DateTime.Now, 
       Finish = DateTime.Now, 
       TotalMilliSecond = 0, 
       Type = 6 
      }; 
      DbWork db = new DbWork(); 
      db.LogEkle(log); 
     } 
     catch (Exception ex) 
     { 
      string h_mesaj = ex.Message.ToString(); 
      string icerik = ""; 
      if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
      string h_yer = ex.StackTrace.ToString(); 
      dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "CanliMaclariSil()", DateTime.Now, h_mesaj, icerik, h_yer); 
     } 
    } 
    private void VideoEslestir() 
    { 
     try 
     { 
      ISchedulerFactory schfack = new StdSchedulerFactory(); 
      IScheduler scheduler = schfack.GetScheduler(); 

      IJobDetail jobdetay = JobBuilder.Create<VideoEslestir>() 
       .WithIdentity("videoeslestir") 
       .Build(); 

      ITrigger trigger = TriggerBuilder.Create() 
       .WithSimpleSchedule(s => s.WithIntervalInMinutes(videoeslestir).RepeatForever()) 
       .StartAt(g_videoeslestir) 
       .Build(); 
      scheduler.ScheduleJob(jobdetay, trigger); 
      scheduler.Start(); 

      Log log = new Log() 
      { 
       Name = "VideoEslestir Görev Emri", 
       Description = "VideoEslestir Görev Emri Verildi.", 
       Start = DateTime.Now, 
       Finish = DateTime.Now, 
       TotalMilliSecond = 0, 
       Type = 6 
      }; 
      DbWork db = new DbWork(); 
      db.LogEkle(log); 
     } 
     catch (Exception ex) 
     { 
      string h_mesaj = ex.Message.ToString(); 
      string icerik = ""; 
      if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
      string h_yer = ex.StackTrace.ToString(); 
      dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "videoeslestir()", DateTime.Now, h_mesaj, icerik, h_yer); 
     } 
    } 
+1

后您使用 – Jinish

+0

cron的表达式Quartz.net运行在网站的AppPool中。如果没有流量,AppPool将会进入睡眠状态,触发器将不会被触发。当池再次启动时,定时器被重置。或者别的什么东西导致了AppPool的回收,比如更改'bin'文件夹 – VDWWD

+0

好的,我添加了源代码。 –

回答

0

正如我在我的评论中提到的那样,您使用的触发器数量与当前的调度器数量相同。每个调度程序将使用他自己的Threadpool和10个线程,并且由于没有更多的线程来执行您的作业,您的线程可能会被对方阻塞。你所有的触发器只需要1个Scheduler。

你可以改变你的代码来创建只有一个调度

public void RunJobs() 
{ 
    ISchedulerFactory schfack = new StdSchedulerFactory(); 
    IScheduler scheduler = schfack.GetScheduler(); 

    CanliMaclariGetir(scheduler); 
    // ...your other jobs 

    // after scheduling all of your jobs, start the scheduler 
    scheduler.Start(); 
} 

private void CanliMaclariGetir(IScheduler scheduler) 
{ 
    try 
    { 
     IJobDetail jobdetay = JobBuilder.Create<CanliMaclar>() 
      .WithIdentity("canlimacgetir") 
      .Build(); 
     ITrigger trigger = TriggerBuilder.Create() 
      .WithSimpleSchedule(s => s.WithIntervalInSeconds(canlimacgetir).RepeatForever()).StartAt(g_canlimacgetir).Build(); 
     scheduler.ScheduleJob(jobdetay, trigger); 

     Log log = new Log() 
     { 
      Name = "CanliMaclariGetir Görev Emri", 
      Description = "CanliMaclariGetir Görev Emri Verildi.", 
      Start = DateTime.Now, 
      Finish = DateTime.Now, 
      TotalMilliSecond = 0, 
      Type = 6 
     }; 

     DbWork db = new DbWork(); 
     db.LogEkle(log); 
    } 
    catch (Exception ex) 
    { 
     string h_mesaj = ex.Message.ToString(); 
     string icerik = ""; 
     if (ex.InnerException != null) { icerik = ex.InnerException.ToString(); } 
     string h_yer = ex.StackTrace.ToString(); 
     dal.HataEkle("", "Gorevler Katmanı > Gorev_Zamanlayici.cs", "CanliMaclariGetir()", DateTime.Now, h_mesaj, icerik, h_yer); 
    } 
} 

我也建议你返工整个代码不重复自己。你的方法几乎相同。您可以使用一种方法来创建触发器,以使其更易于阅读:

public ITrigger CreateTrigger(TimeSpan timeSpan, string name = "") 
{ 
    return TriggerBuilder.Create() 
     .StartNow() 
     .WithDescription(name) 
     .WithSimpleSchedule(x => x 
      .WithInterval(timeSpan) 
      .RepeatForever()) 
     .Build(); 
} 

其余的优化代码是由你;)

+0

非常感谢。 –