Ich habe eine Anwendung mit dem Quartz Scheduler, um Jobs zu planen. Die Anwendung führt derzeit die Quartz-Version 1.6.2 aus. Mein JobStore ist org.quartz.impl.jdbcjobstore.JobStoreTX mit einer Oracle-Datenbank, die dies unterstützt. Clustering ist aktiviert, aber es gibt nur einen Scheduler, der die Datenbank verwendet. Mein Quartz Threadpool wird wie folgt konfiguriert:Kann ich warten, dass Quartz Jobs in der Reihenfolge ausgelöst werden, in der sie ausgelöst wurden?
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5
Meine Jobs sind langer Lauf, also ist es ziemlich häufig 5 Arbeitsplätze zu laufen hat (das Maximum von meinem Thead Pool erlaubt), wenn Trigger neue Arbeitsplätze feuert. Die neu ausgelöst Jobs Fehlzündungen und ich sehe, Log-Meldungen wie folgt aus:
2011-05-20 04:09:30,097 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName1 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:08:29 05/20/2011
2011-05-20 04:09:30,120 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName1 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:09:30 05/20/2011
2011-05-20 04:09:30,125 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName2 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:08:30 05/20/2011
2011-05-20 04:09:30,138 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName2 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:09:30 05/20/2011
2011-05-20 04:11:29,998 INFO [QuartzScheduler_scheduler-servername-111305822376676_MisfireHandler] o.q.impl.jdbcjobstore.JobStoreTX - Handling 2 trigger(s) that missed their scheduled fire-time.
Sobald ein laufender Job beendet, einer der fehl zündenden Arbeitsplätze werden abgeholt und normal laufen. Quartz scheint jedoch zufällig einen fehlgesteuerten Auftrag aufzunehmen, ohne die Reihenfolge zu berücksichtigen, in der die Aufträge ursprünglich ausgeführt wurden. Idealerweise hätte ich gerne, dass sie in der Reihenfolge abgeholt werden, in der sie ausgeführt werden sollten, basierend auf ihren ursprünglichen Feuerzeiten.
Ist es möglich, dass meine wartenden (fehlgesteuerten) Jobs in der Reihenfolge ausgelöst werden, in der sie ausgelöst wurden, sobald Speicherplatz im Quartz ThreadPool verfügbar wird?
Ich kann das nicht wirklich testen, weil ich einen neuen Job bekommen habe, seit Jahren keinen Quarz mehr benutzt habe und nicht daran interessiert bin, ein Testprojekt zu starten, nur um zu sehen, ob das funktioniert. Wie auch immer, ich bin beeindruckt, dass Sie sich die Mühe gemacht haben, eine 5 Jahre alte Frage zu beantworten, und Ihre Antwort scheint hilfreich zu sein, also werde ich das als gelöst markieren :) –
Ich hatte ein ähnliches Problem, also suchte ich Paketüberfluss. Am Ende durchforstete ich den Code und fand es selbst heraus, dachte aber, ich würde das hier lassen, für den Fall, dass jemand in Zukunft nach der Antwort suchen würde. – samblake
@JonQuarfoth Was hat am Ende für dich funktioniert? Ich plane 10s Tausende von Job und Job wird lange dauern, wie ich Blob von Ort zu einem anderen migrieren muss und diese Blobs können so groß wie 100 GB sein. Ich plane, Quartz-Clustering zu verwenden, so dass, wenn der Master den Job plant, Sklaven an diesen Jobs weiterarbeiten werden und ich mich nicht wirklich um Fehlzündungen kümmere, da ich mich nur darum kümmere, dass der Job am Ende von einem der Sklaven abgeholt wird . Vielleicht kann ich einen lächerlich großen Fehlzündungsschwellwert setzen. Bitte lass mich wissen, was ihr darüber denkt. Vielen Dank. – Coder