2012-06-16 93 views
0

架構模塊需要的建議java中的多線程持久隊列

我有一個監聽端口的端口監聽器。所有收到的請求都需要排隊。我有5個線程來處理隊列。與此同時,所有傳入的請求都必須保持不變,處理的響應也一樣。

什麼是最好的方法來實現呢?

請求和響應不能一起保存,因爲可能會出現幾次需要暫時停止處理的情況。另一種情況可能是此應用程序的失敗。我們應該能夠從持久存儲中恢復隊列。

另一個問題是我們無法保證隊列的大小。所以從數據庫連續獲取物品所花費的時間應該更少。數據庫中可能有時沒有請求。我應該去NOSQL嗎?

+0

我不知道我是否正確理解你的問題......你似乎想暫時排隊請求,然後讓他們處理,這是正確的嗎?當然,真正的Java排隊框架會是最好的? ActiveMQ的例子? – grahamrb

+0

@grahamrb是這正是我想要的。有時我可能希望應用程序正在運行,但無需處理。所以隊列大小會增加。我將如何處理 –

回答

1

基本概念是使用持久隊列。

您的請求處理程序(例如Servlet)應將請求轉換爲JMS消息並通過JMS隊列發送它們。您可以使用ActiveMQHornetQ或其他。接下來,創建一個消息驅動Bean,該消息來自該隊列中的消息。

JMS隊列是持久性的,所以如果你的服務器發生故障,你不會失去你的任務。可以控制MDB(例如,使用JMX或系統屬性),以便隨時可以停止處理,並且任務將存儲在隊列中,直到您再次啓用MDB。

Here is a complete JMS walk-through from Oracle這將告訴你一步一步如何做到這一點。