2016-08-18 18 views
2

我有一個Java應用程序,它已經計劃在設定的時間每晚運行一次。如果符合條件,應用程序將發送電子郵件。所有的調度代碼都在Java中,我沒有使用任何Amazon的功能來調度它。此應用程序已部署在EC2實例上,並位於彈性負載均衡器之後。基於負載,可以添加額外的節點。我的Java應用程序也被複制到其他節點,夜間作業在所有實例上執行。如果僅在一個實例上運行夜間作業(如果它在N個實例上部署),該如何運行?

有沒有辦法讓我單個節點執行這項工作?

謝謝。

+0

開始時,你可以開始工作,或者是它的東西你自己創建的定製? –

+0

我使用Spring來安排它。我使用@Scheduled註釋來標註函數,並傳遞一些cron配置。所以我的註釋看起來像@Scheduled(cron =「0 0 0 * *?」) –

+0

你的問題基本上是這一個的副本:http://stackoverflow.com/questions/31288810/spring-scheduled-task-running-在集羣環境中,我建議閱讀這個問題的答案。 –

回答

0

心中已經更新部署到亞馬遜(並有與Spring小經驗),但我看到一些方法來解決這個問題:

  1. 只需使用Apache的動物園管理員。在zookeeper中爲每個節點創建臨時順序節點。當我計劃時間和節點首先在隊列中時 - 從隊列中刪除節點,再次添加節點並開始您的工作(Apache Curator Framework具有您在代碼中實現它所需的所有功能)
  2. 使用Hazelcast隊列邏輯)。好處:可以在嵌入模式下使用hazelcast。缺點:不知道有關亞馬遜的榛樹發現能力,至於我的經驗 - 榛樹不如動物園管理員穩定。
  3. 其他方式 - 如果你有任何「實例ID」上的每個實例,如果您正在使用某種形式的調度庫或框架達成instanceId.hashcode() % dayOfMonthNumber == 0
+0

讓我試着用這些方法開發解決方案。 –

+0

只是告訴我你是否需要幫助 –

相關問題