2017-03-06 2 views
0

J'utilise le simple planificateur de la bibliothèque Quartz.net. J'ai 7 déclencheurs différents. La séquence est comme ça.Quartz.net ne fonctionne pas toujours

Première: toutes les 120 minutes.
Deuxième: toutes les 12 heures.
Troisièmement: toutes les 5 minutes.
Quatrième: toutes les 3 minutes.
Cinquième: toutes les 29 secondes.
Sixième: toutes les 10 secondes.
Septième: toutes les 5 secondes.

C'est un peu compliqué comme vous le voyez. J'ai un problème comme celui-ci. First Trigger doit travailler toutes les deux heures. Mais après quelques courses, il s'arrête tout seul. Ca ne fonctionne pas du tout. Les autres travaillent et ils vont bien. Je suis désolé pour mon mauvais anglais.

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

Affichez les expressions CRON que vous utilisez – Jinish

+0

Quartz.net fonctionne dans l'AppPool du site Web. S'il n'y a pas de trafic, l'AppPool sera mis en veille et les déclencheurs ne seront pas déclenchés. Lorsque la piscine redémarre, la minuterie est réinitialisée. Ou quelque chose d'autre provoque un recyclage de l'AppPool, comme des changements dans le dossier 'bin' – VDWWD

+0

Ok, j'ajoute du code source. –

Répondre

0

Comme je l'ai mentionné dans mes commentaires, vous utilisez actuellement d'ordonnanceurs que vous avez des déclencheurs. Chaque planificateur utilisera son propre Threadpool avec 10 threads et il se pourrait que vos Threads soient bloqués les uns par les autres car il n'y a plus de Threads pour exécuter vos jobs. Vous n'avez besoin que d'un planificateur pour tous vos déclencheurs.

Vous pouvez modifier votre code pour créer un seul 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); 
    } 
} 

Je recommande également que vous retouchez le code entier pour ne pas vous répéter. Vos méthodes font presque la même chose. Vous pouvez utiliser une méthode pour créer votre Trigger pour le rendre plus lisible:

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

Le reste d'optimiser le code est à vous;)

+0

Merci beaucoup. –