2012-03-17 24 views
1

ここでは、私は洗練されたソリューションを考え出しています。あなたのアイデアや、Javaを使って解決策を手伝ってくれるライブラリを知りたい。永続優先キューとJavaのコンシューマスレッドプール

  1. 永続(多分後で別のソリューション現在DB)であることが必要プライオリティキューのNの数があります。

  2. いくつかの優先度(スレッドプールの優先待ち行列)に従って プライオリティキューラウンドロビン方式で、または好ましくは上部要素を実行スレッドプールがあります。すべて 要素がどの私は からの応答が到着するまでを待っているネットワークを介してメッセージを送信し、にそのキューの状態 を変更するための優先度キュー内の要素の

  3. 実行がは、同期ではありませんネットワーク。 応答が非常に長い時間で到着する可能性があるので、スレッドが他の要素を処理し続けるようにします。

答えて

2

私は耐久性のあるJMSキューを使用します。ワーカーのスレッドプールをキューに追加し、結果/応答をキューに入れることができます。

組み込みが簡単なJMSブローカーはActiveMQです。これらのタスクをルーティングするためにApache Camelを見ることもできますが、それはあなたの要求を満たすものではありません。

+0

名前キューの示唆に反して、メッセージは送信された順序で配信される必要はないことに注意してください。JMSキューは各メッセージが1回だけ処理されることを保証します。 http://en.wikipedia.org/wiki/Java_Message_Service永続的なJMSキューは順序を保持していますか? – metdos

+1

通常。一部のJMSサーバには、配信メッセージが一括して処理されるパフォーマンスオプションがあります。これは、各作業員が見ているものに関して、不注意で配送する可能性があります。つまり、1人の作業者が0〜9の作業を、10〜19が作業10の前に処理できるということを意味します。複数の作業者で1つずつ作業を行う場合でも問題はあります。その解決策はそのような保証を必要としないことです。複数のタスクを順番に実行する必要がある場合は、それらをすべて同じメッセージに入れます。 –