0

着信 XMPP パケットを処理するために、smack ライブラリと組み合わせた EJB 3.1 アーキテクチャで Glassfish 3.1.1 を使用しています。

このために、着信パケットを処理するシングルトンからスレッドを開始しました。

Packet packet = collector.nextResult();
if (packet != null)
  processPacket(packet); // here i lookup my processing EJB and start working

私が必要としているのは、一度に送信者ごとに 1 つのパケットを処理するためにパケットをキューに入れるキューです。現時点では、受信したすべてのパケットを並行して処理しているため、パケットの順序を維持できません。

これをできるだけエレガントに解決する方法はありますか?

こんにちは

PS: 最初のアプローチは、現在どのクライアントがパケットを処理しているかを保存し、収集したパケットを反復処理して、何も処理していない送信者を探すことです。しかし、バッファ内のどのパケットも処理できない場合、これには多くの反復コストがかかるのではないかと心配しています。

4

1 に答える 1

0

事前に送信者を知っている場合は、各送信者に一致するPacketFilterを登録できます。したがって、各コレクターは各送信者からのパケットをキューに入れます。

わからない場合は、同じことを実行できますが、メッセージを自分でルーティングする必要があります。コレクターの代わりにPacketListenerを使用し、各メッセージを受信時に送信者キューにルーティングします。キューがまだ存在しない場合は、オンデマンドでキューを作成できます。

于 2012-04-19T20:09:45.410 に答える