本文介紹了如果Kubernetes上存在多個Pod,則在Spring中從單個Pod運行調度的Cron方法的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我將在Kubernetes上為我的Spring應用程序從單Pod(docker圖像)遷移到多Pod以進行負載處理。但我面臨著一個問題,因為我的應用程序中有一個cron調度程序方法,它每天在特定時間運行。如果我部署多個Pod,它們會同時運行,因此多個條目會保存到我的數據庫中,但我只想要一個Pod來執行該功能。
我曾考慮生成Java UUID,并在函數開始在每個Pod上執行時將其保存在數據庫中。然后在相同的函數中,設置一個休眠計時器,比方說,5秒,并比較來自每個Pod中數據庫的UUID。更新數據庫中最新值的Pod將匹配該值,并將提前執行該方法。
這是一個好方法嗎?如果不是,請提供可以解決此問題的建議。
jdbc
您可以將Quartz調度程序與推薦答案存儲一起使用。這將自動滿足您的要求。
簡而言之:負載平衡是自動進行的,集群中的每個節點都會盡可能快地啟動作業。當觸發器的觸發時間發生時,第一個獲取它的節點(通過在它上設置鎖)是將觸發它的節點。";
詳情請參考官方鏈接-http://www.quartz-scheduler.org/documentation/quartz-2.3.0/configuration/ConfigJDBCJobStoreClustering.html
這篇關于如果Kubernetes上存在多個Pod,則在Spring中從單個Pod運行調度的Cron方法的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,