2011-07-12 18 views
14

我在負載平衡器後面有一層相同的應用程序服務器。出於操作原因,我有兩個應用程序服務器上的應用程序配置必須相同,以便可以輕鬆地添加和刪除節點。所有應用服務器共享相同的數據庫。應用程序服務器不會/不會被羣集。使用Quartz在多個無狀態應用程序服務器上安排單個作業

到目前爲止,這一直運行良好,但現在我想有一個計劃的作業只在其中一個應用程序服務器上執行。所有應用程序服務器都將運行Quartz並具有相同的計劃來運行作業。觸發器會在每個應用程序服務器上觸發,但我只希望一個應用程序服務器能夠真正執行作業 - 實質上,它們都是比賽開始,只有一個實際啓動,其餘應用程序服務器只是忽略該作業。這裏的想法是,如果我們失去了一個應用服務器,另一個將會運行這個工作,如果我們添加新的應用服務器,他們將會輪流執行作業。

我打算通過在數據庫中創建一個「作業鎖定」表,在開始作業之前所有應用程序服務器都會讀取,並且只有在作業「解鎖」時纔會啓動。首先進行更新的應用程序服務器通過將表更新爲運行狀態/在作業結束時重置它來實質上阻止其他應用程序。

我建立在此之前,我會很感激那些一些輸入與石英更多的經驗:

一)我可以掛鉤此行爲爲石英,使其不必在每一完成任務基礎?即開發人員可以添加新的工作,而不必擔心工作鎖定,因爲它被抽象出來。 b)Quartz是否提供了任何內置的機制來實現類似於上面的內容,所以我不必自己推出它?

謝謝!

回答

18

你認爲這對你有用嗎?從鏈路

聚類 http://quartz-scheduler.org/documentation/quartz-2.x/configuration/ConfigJDBCJobStoreClustering

摘錄目前僅與JDBC-作業存儲(JobStoreTX或JobStoreCMT)的作品,並且基本上由具有羣集共享的每個節點在同一數據庫中運行。

負載均衡自動發生,集羣中的每個節點都儘可能快地發起作業。當觸發器的觸發時間發生時,獲取它的第一個節點(通過放置一個鎖)就是將會觸發它的節點。'

+0

我不知道我錯過了什麼:/謝謝。 – Scruffers

+0

如果您發現我的答案有用,那麼請不要忘記將其標記爲「接受的答案」 – Sap

+0

使用Quartz的羣集是羣集環境的羣集, –

相關問題