2009-07-08 14 views
0

JMSキューからメッセージを受信する「サーバー」アプリケーションがあります。また、一時キューを作成してからサーバーにメッセージを送信し、JMSReplyToヘッダーを一時キューに設定するクライアントアプリケーション。JMS、一時キューが破棄されたときの検出

サーバーは、一時キューを使用してクライアントに返信します。しかし、サーバーには、クライアントに戻ってきた多くの返信が、一時的な待ち行列を介して長時間にわたって送信されています(返信はそのクライアントに固有のものであり、他の人にとって興味深いものではありません)。

私のサーバークライアントが切断されたかどうかを検出します。そのため、特定の一時キューを介してメッセージを送信することを停止できますか?あるいは、私はJMSでやるべきことをやろうとしていますか?

答えて

0

さて、クライアントがなくなれば、そのキューへの投稿は失敗するはずです。一時キューは、それを作成したセッションが存在している間だけ存在すると想定されます。

私は、クライアントがなくなったときに通知する必要があることはわかりません。これは、返信メッセージを送信しようとすると実際にこれを示すため、JMS経由では実行できません。

+0

まあ、いくつかの初期テスト(activemqを使用)は、クライアントが終了してから20秒後に一時的な待ち行列にエラーなしで送信し続けることを示しています – nos

+0

待ち行列の未処理のメッセージはそれを生き続けるでしょうか?クライアントがメッセージの終わりのメッセージを通知するという協調的解決策はありますか? – akarnokd

+0

これは、クライアントが決してクラッシュすることを必要とせず、ネットワークが常に有効であることを必要とする次善策です(メッセージの終わりメッセージは送信されない可能性があります)。 – nos

0

activeMQを使用すると、一時的なキューをDestinationにキャストして、宛先に質問することができます。

if (dest.getConsumers().size() < 1) { 
    // No more consumers on this destination, so kill it. 
} 

または宛先から

DestinationStatisticsを取得し、その後、より大きな nが、その後tempQを殺す場合、 getMessages()からキューの深さを取得します。

関連する問題