Ho un setup Quartz con più istanze e voglio interrompere un lavoro ovunque venga eseguito. Come è stato detto nella documentazione, il metodo Scheduler.interrupt()
non è a conoscenza del cluster, quindi sto cercando una pratica comune per superare tale limite.Interruzione di un lavoro nel cluster di quarzo
risposta
Bene, ecco alcuni principi fondamentali che è necessario utilizzare per ottenere ciò.
Quando si esegue in modalità cluster, le informazioni sui lavori attualmente in esecuzione sono disponibili nelle tabelle del quarzo. Ad esempio, lo q_fired_triggers
contiene il lavoro che si sta eseguendo. La prima colonna di questa tabella è il nome dello scheduler che ne è responsabile. Quindi è abbastanza facile sapere chi sta facendo cosa.
Quindi, se si abilita l'esportazione JMX delle istanze di quarzo org.quartz.scheduler.jmx.export
, gli MBeans abiliteranno un nuovo punto di ingresso per la gestione remota di ogni singolo programma di pianificazione. Il MBean fornisce un metodo boolean interruptJob("JobName", "JobGroup")
Poi "solo" necessità di chiamare questo metodo per l'istanza di pianificazione appropriata per interrompere efficacemente.
Ho provato tutto il processo manualmente e funziona bene, basta essere automatizzata :)
HIH