2010-03-24 83 views
2

是否可以將JMS接收器實例的數量限制爲單個實例?即只能在任何時候從隊列中處理單個消息?限制JMS目標實例

我問的原因是因爲我有一個相當密集的渲染類型進程來運行每個消息(可能數千)。我希望一次將此代碼的執行限制爲單個實例。

我的應用服務器JBoss應用服務器6.0

回答

2

您可以配置隊列監聽池有一個線程,所以不超過一個監聽器是處理請求,但是這是沒有意義的我。

正確的答案是調整線程池的大小以平衡性能和內存要求。

數千?每秒鐘,每分鐘,每小時?他們到達的速度以及每項任務的時間都是至關重要的。每個請求需要多少時間,內存,CPU?確保你配置你的隊列來處理可能是一個相當大的積壓。

更新:如果每秒有十條消息到達,並且單個偵聽器處理一條消息需要10秒鐘,那麼您需要101個偵聽器線程才能跟上。 (10條消息/秒* 10秒意味着當第一個監聽者完成10秒任務時,有100條消息到達,第101個監聽者將處理第101條消息,隨後的監聽者將及時完成。)如果您需要1 MB每個聽衆的RAM,你只需要101 MB RAM來處理一臺服務器上的所有消息。你也需要一個類似的CPU估算。

如果一臺服務器不夠用,考慮多個服務器上的多個隊列以及它們之間的負載平衡可能是明智的。

+0

謝謝 - 只是給出一個粗略的想法,我們正在談論每秒幾十個請求,每個消息的處理時間可能在10到30秒之間。儘管我希望儘可能優化處理速度,但如果爲每個請求創建新實例,我最擔心的是服務器資源將會耗盡,正如我現有的使用無狀態會話Bean調用的實現所發生的情況一樣。 – jumponadoughnut 2010-03-24 18:51:33