私はいくつかのモジュールで構成されるアプリケーションに取り組んでいます。これらのモジュールの 1 つで、誰かがトピックにメッセージを発行するトピック プロデューサーを作成しましたが、このモジュールにはメッセージをデキューするトピック コンシューマーがありません。トピック プロデューサーは、 を使用して、time-to-live プロパティを 300000 ミリ秒に設定しsetTimeToLive()
ます。
コンシューマが存在しない場合、メッセージは 300000 ミリ秒以内に期限切れになり、割り当てが解除されると予想されます。
アプリケーションは Tomcat 6.0.36 にデプロイされ、外部の ActiveMQ サーバーを使用してキューとトピックを処理します。
トピック設定の [MBeans] タブで Java VisualVM を使用して ActiveMQ を監視すると、変数 "Enqueue Count" が大きくなっていることがわかりますが、これらのメッセージで有効期限の設定が有効になっているかどうかわかりません。カウンター「ExpiredCount」が増加することを期待していましたが、それでも 0 に固定されたままです。
これらのメッセージがまだメモリに残っているのか、それとも割り当てが解除されているのかを理解する方法はありますか?
どうもありがとうございました!
編集:
内部のglassfish 3.1をサーバーとして使用してnetbeans 7.3でj2eeチュートリアルの例を使用していくつかのテストを行い、jvisualvmでそれを監視し、すべてapiが言うように動作します:
JMS API には、トピックを参照するメカニズムはありません。通常、メッセージは表示されるとすぐにトピックから消えます。メッセージを消費するメッセージ コンシューマーが存在しない場合、JMS プロバイダーはメッセージを削除します。永続的なサブスクリプションでは、メッセージ コンシューマーがアクティブでない間、メッセージをトピックに残すことができますが、メッセージを調べる機能はありません。
グラスフィッシュがactiveMQ内で使用していることを読んだので、これがスタンドアロンのActiveMQサーバーでも有効であることを願っています。
編集を終了します。