一、問題分析
對於單機的任務排程,使用Quartz十分方便。但是在分散式情況下,對於叢集中每臺機器都會執行任務,從而造成了重複執行任務的問題。
二、解決思路
Quart不僅支援單機任務排程,同時也支援叢集中的任務排程。原理如下:
在叢集中,各個不同的機器公用同一個排程器,排程器按照一定的演算法選擇叢集中某一臺機器執行任務。
優點:
1、避免了每臺機器都進行任務排程
2、避免了所有任務在單機執行造成效能下降
三、解決方案
要啟用quartz的分散式任務排程處理,只需如下兩個步驟,同時程式無需修改:
(1)在資料庫中建立quartz需要的表。這些表由quartz自己維護,用於儲存資料和維護程式執行狀態,這些表對於程式設計師而言是透明的,不需要關注,只需建立好表即可。
(2)在工程的src下增加quartz.properties配置檔案,進行叢集相關操作的配置。
配置檔案如下:
#Configure Main Scheduler Properties
#==============================================================
#配置叢集時,quartz排程器的id,由於配置叢集時,只有一個排程器,必須保證每個伺服器該值都相同,可以不用修改,只要每個ams都一樣就行
org.quartz.scheduler.instanceName = Scheduler1
#叢集中每臺伺服器自己的id,AUTO表示自動生成,無需修改
org.quartz.scheduler.instanceId = AUTO
#Configure ThreadPool
#==============
一、問題分析
對於單機的任務排程,使用Quartz十分方便。但是在分散式情況下,對於叢集中每臺機器都會執行任務,從而造成了重複執行任務的問題。
二、解決思路
Quart不僅支援單機任務排程,同時也支援叢集中的任務排程。原理如下:
在叢集中,各個不同的機器公用同一個排程器,排程器按照一定的演算法選擇叢集中某一臺機器執行任務。
優點:
1、避免了每臺機器都進行任務排程
2、避免了所有任務在單機執行造成效能下降
三、解決方案
要啟用quartz的分散式任務排程處理,只需如下兩個步驟,同時程式無需修改:
(1)在資料庫中建立quartz需要的表。這些表由quartz自己維護,用於儲存資料和維護程式執行狀態,這些表對於程式設計師而言是透明的,不需要關注,只需建立好表即可。
(2)在工程的src下增加quartz.properties配置檔案,進行叢集相關操作的配置。
配置檔案如下:
#Configure Main Scheduler Properties
#==============================================================
#配置叢集時,quartz排程器的id,由於配置叢集時,只有一個排程器,必須保證每個伺服器該值都相同,可以不用修改,只要每個ams都一樣就行
org.quartz.scheduler.instanceName = Scheduler1
#叢集中每臺伺服器自己的id,AUTO表示自動生成,無需修改
org.quartz.scheduler.instanceId = AUTO
#==============================================================
#Configure ThreadPool
#==============