私はGlassfish 3.1.1と、着信XMPPパケットを処理するためにsmackライブラリと組み合わせたEJB 3.1アーキテクチャを使用しています。各送信者のメッセージキュー
これは私のスレッドは、受信パケットを処理するシングルトンから開始しています。私は必要なもの
Packet packet = collector.nextResult();
if (packet != null)
processPacket(packet); // here i lookup my processing EJB and start working
は時間で、送信者ごとにプロセスつのパケットにパケットを並ぶキューです。現時点では、すべての受信パケットを並行して処理するため、パケットの順序を保持することができません。
どのように私はこれを可能な限りエレガントに解決することができますか?
挨拶は
PS m個:最初のアプローチは、現時点でパケットを処理し、私が収集したパケットを反復処理すると、何も処理していない送信者を探しされているクライアント格納することです。しかし、バッファ内のパケットのどれもが処理されることが許されない場合、これは多くの反復を要することになると思います。
以前はPacketListenerを試しましたが、パケットの処理を停止したいときにはより多くの制御ができるので、私はPacketCollectorを優先します。ヘイバーロードの下では、パケットリスナーは、キャンセルしてもバッファーが空になるまでコールバック関数を呼び出し続けます。コレクタでは、キューイングされたパケットの数(リフレクション)を取得して、そのヘルスステータスを判別することで監視することもできます。とにかく。私が新しいパッケージを受け取るとき、私はクライアントごとに効率的なキューイングを必要とします。あなたはそれについて何か考えていますか?私はPSに私の最初のアプローチを投稿します。 – mkuff