2012-03-17 90 views
1

下面是我想爲其提出優雅解決方案的問題。我想知道你的想法和一些可以幫助我使用Java獲得解決方案的庫。Java中的持久優先級隊列和消費者線程池

  1. 會有的優先級隊列這就需要將 持續(目前DB,也許以後另一種解決方案)N號碼。

  2. 將會有一個線程池,其執行在一個循環方式的 優先級隊列頂端元件或優選地,根據一些 優先級(對於線程池中的優先級隊列)。在優先級隊列的元素

  3. 執行不同步,對於所有 元素我通過網絡發送一個消息,並更改該隊列的狀態 到等待直到響應的從 到來的到來網絡。我想要線程繼續處理其他元素,因爲 響應可能會在很長的時間內到達。

回答

2

我會使用持久的JMS隊列。您可以將工作線程池連接到隊列並排隊結果/響應。

一個簡單易用的可嵌入的JMS代理是ActiveMQ。你也可以看看Apache Camel的路由這些任務,但它可能會超出你的要求。

+0

維基百科說:「請注意,與名稱隊列的建議相反,消息不必按發送的順序傳遞,JMS隊列只能保證每條消息只處理一次。」 http://en.wikipedia.org/wiki/Java_Message_Service持久的JMS隊列是否保持順序? – metdos 2012-03-17 10:33:19

+1

通常。一些JMS服務器有一個性能選項,其中傳遞消息罪惡批。這可能會導致每個工作人員看到的無序交付。即一個工人可以從0到9任務,另一個10到19可以在工作1之前處理工作10.即使您一次交付一個工人,但有多個工人,也不能保證工作0將在完成之前完成工作1.解決方案是不需要這樣的保證。如果您有多個必須按順序執行的任務,請將它們全部放在相同的消息中。 – 2012-03-17 10:49:58