2010-08-02 48 views
4

我正在構建一個執行數據庫進程的Web服務(運行多個查詢的SQL代碼,然後在兩個真正大的表之間移動數據),我假設一些進程可能需要2到10個小時才能執行。用於Web服務中長時間運行過程的Java模式

什麼是從Java Web服務(它實際上是基於REST的使用JAX-RS和Spring)執行長時間運行的數據庫進程的最佳實踐?該過程將在1次Web服務調用後執行。預計這一執行將每週進行一次。

在此先感謝!

回答

6

它必須是異步的。

由於您的Web服務調用是RPC,所以最好讓實現驗證請求,將其放在隊列中進行處理,並立即發回包含令牌或URL的響應以檢查進度。

設置一個JMS隊列並註冊一個偵聽器,將消息從隊列中取出並保存。

如果這真的需要2-10個小時,我建議您查看您的模式和查詢,看看您是否可以加快速度。有一個索引失蹤了,我敢打賭。

+0

謝謝!我現在正在學習ActiveMQ來實現這一點。還有一個問題,這是我使用pub/sub(主題)還是隊列的情況?在這種情況下每個人有什麼優點和缺點? – wsb3383 2010-08-12 03:12:36

+0

@duffymo:任何想法如何使用令牌或URL來檢查進度? – Diluu 2014-03-21 03:49:11

+0

你可以輪詢(「完成?現在怎麼回合?」)或使用事件和回調。 – duffymo 2014-03-21 09:10:55

1

我在哪裏工作,目前我正在評估針對這種確切情況的不同策略,只有時間不同。

隨着您所處的時代,您可能會更好地使用發佈/訂閱消息隊列(ActiveMQ)。

+0

謝謝你,爲什麼你認爲pub/sub是排隊的首選方法? – wsb3383 2010-08-13 00:38:56

+0

這個問題真的屬於「我們如何使這個Web服務在服務器上異步」。對於它有一些解決方案(Metro WS堆棧有一些支持),但在我看到的那些解決方案中,他們實際上並不是那麼友好。 Pub/Sub消息隊列是爲這種情況而建立的,正如俗話所說:「使用正確的工具來完成這項工作。」可悲的是,對於我的工作項目,我們選擇不使用Pub/Sub消息隊列。 – 2010-08-13 17:59:15

相關問題