所以,我有一個Web客戶端和一個EJB定時器,單獨部署。如何協調部署到WebLogic集羣中的多個服務器的單個ejb計時器?
工作流程如下:
1)用戶訪問客戶端。 2)用戶請求發生已知長時間運行的操作,因此我們將請求運行到數據庫表中。 3)TimerOne每隔幾秒檢查一次該表以查看是否有任何等待任務,以便找到用戶的請求並運行任務。
我的問題是,在我們的應用程序運行的某些環境中,我們正在利用服務器集羣。當我們這樣做時,客戶端和EJB定時器都被部署到集羣中的每個服務器上。
可以將客戶端部署到多個服務器,因爲它有助於工作負載;但是,使計時器在多個服務器上運行是個問題。當用戶請求運行長時間運行的任務時,兩個定時器同時從數據庫中獲取任務並開始運行。由於長時間運行的作業通常會寫入數據庫,因此這種情況會導致衝突等問題。
我的目標是能夠將EJB定時器部署到兩臺服務器上,但是在羣集中可以維護一些狀態,定時器可以使用這些狀態來決定是否應該選擇任務,或者如果其他實例已經撿起來了。
我試過使用數據庫和試用文件存儲,但是這些要麼太慢,要麼我不能拿出防彈工作流的同步。
有誰知道處理這個問題的好方法嗎?它甚至有可能嗎?
該解決方案應該能夠在羣集WebLogic域,非羣集WebLogic域,羣集Glassfish域和非羣集Glassfish域中運行。
如果還有另一種更優雅的解決方案,我願意改變這種方式。
感謝您的任何想法!