簡體   English   中英

中斷石英集群中的工作

[英]Interrupting a job in quartz cluster

我有一個包含多個實例的 Quartz 設置,我想在執行作業的任何地方中斷它。 正如文檔中所說, Scheduler.interrupt()方法不是集群感知的,所以我正在尋找一些常見的做法來克服這種限制。

好吧,這里有一些你應該用來實現它的基礎知識。

在群集模式下運行時,石英表中提供了有關當前正在運行的作業的信息。 例如, q_fired_triggers包含正在執行的作業。 該表的第一列是負責它的調度程序名稱。 所以很容易知道誰在做什么。

然后,如果啟用石英實例org.quartz.scheduler.jmx.export的JMX導出,則MBean將啟用新的入口點以單獨遠程管理每個調度程序。 MBean提供了一個方法boolean interruptJob("JobName", "JobGroup")

然后你“ 只需 ”在適當的調度程序實例上調用此方法以有效地中斷它。

我手動嘗試了所有的過程,它工作正常,只需要自動化:)

HIH

你是對的。 Scheduler.interrupt()在集群模式下不起作用。 假設作業觸發器由節點中的調度程序觸發,但此 API 在另一個節點中被調用。

為了克服這個問題,您可以使用消息代理方法(例如 JMS、RabbitMQ 等)和發布/訂閱 model。客戶端不會調用Scheduler.interrupt() ,而是將此中斷的消息發送到消息代理,有效負載消息的組成包括作業細節的身份,即JobKey和調度程序的名稱((如果一個節點中使用了多個調度程序)。然后,該消息被運行 Quartz 實例的所有節點消費,並且節點按名稱查找 Quartz 調度程序,然后使用從消息有效負載中獲取的作業詳細信息的標識執行找到的調度程序的Scheduler.interrupt()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM