2009-07-31 70 views
2

如果我想在多用戶環境(通過Tomcat-servlet)中運行一個進程(完成此過程需要花費幾個小時),哪個更好地實現此過程? 1)在線程或2)在JMS 有什麼優點和缺點?線程或JMS哪個更好?

回答

3

不確定您使用JMS時的設想,完成的方式是讓客戶端在隊列上彈出請求,並且有一些(可配置的)工作線程將請求關閉並對其進行維護。在我的情況下,我將有一個MDB作爲讓這些工作線程運行的機制 - 但這只是一個實現細節。

所以我沒有看到線程和JMS的替代品,更多的JMS給你一個可控的方式來使用線程。您幾乎肯定需要避免允許一次處理太多請求,因此您在概念上需要隊列,可能還需要使用JMS來實現。

要弄清楚各種細節,比如如何溝通結果,確保瀏覽器不會在幾個小時內閒逛。某種Ajax輪詢,或者Comet push可能?

另外還有一個想法 - 處理幾個小時的單一塊?這可能會受益於被分解成若干步驟(再次由JMS隊列中介)。這樣一來,撞車事件並沒有讓所有的事情都回到原點。

0

如果我理解了您的選項,請執行第二個選項,即: 讓Tomcat上的servlet向JMS客戶端(最好是JMS容器中的MDB)發送消息。在那裏,開啓漫長的過程。 這樣做,而不是在servlet中創建一個新的線程(選項1),這是真的不建議做事情的方式。

0

我認爲關鍵因素是:您希望看到的最大併發請求數量是多少,以及您處理溢出的策略是什麼?

如果你一次只有少數的請求,線程就沒問題。維護CountdownLatch的簡單後臺線程可用於處理任何溢出。

如果您預計會有很多請求,那麼JMS可能更適合您的任務。