2009-09-24 144 views
1

的自動縮放我們有一個web應用程序,讓用戶觸發外部資源的請求。外部資源花費不確定的時間來收集結果,因此我們必須輪詢它以獲取更新,並在完成時收集最終結果。消費者池

我們希望這樣做,以便當用戶觸發請求時,它會被添加到一個隊列中,然後一些工作線程會接收每個請求並執行輪詢,而用戶執行其他操作。

由於在一天中請求的數量有很大的變化,我們認爲如果很多工作人員在緩慢時無所事事,會浪費資源,但同時我們需要有足夠的工作人員來處理系統的峯值負載。

我們想的東西時,也有很多等待請求,可以添加更多的工人,但殺死工人時,有一點做。

這是/是可能的EJB要做到這一點,但我們不希望使用。我們也不希望使用JMS或其他大型框架來處理這個問題,除非它是我們已經使用的(Spring,Quartz,許多Apache的東西)。

由於EJB支持這個功能,它的發現有更多的有用的功能之一,我們可以想象,有人已經解決了這個問題對我們來說。建議?

回答

1

java.util.concurrent.ThreadPoolExecutor documentation

如果池目前有超過corePoolSize線程,多餘的線程將被他們是否已經空閒了超過KeepAliveTime的(更終止見getKeepAliveTime(java.util.concurrent.TimeUnit中))。這提供了一種在不積極使用池時減少資源消耗的方法。如果池在以後變得更加活躍,則將構建新線程。

所以,我建議你先試試Java標準庫。您將不得不微調參數,但線程池是高度可配置的。