メッセージをキューに配信した後、ガベージコレクションが行われず、キープアライブしていないようJMSProducer
です。私はSpring 3.2.2を使用しており、CachingConnectionFactory
メッセージを送信するためにキープアライブ設定を使用しています。
メッセージを送信するたびにプロデューサーの数が増え続けます。
私が使用している春のバージョンに関連していますか?
または、構成で何か間違ったことをしていますか?
メッセージをキューに配信した後、ガベージコレクションが行われず、キープアライブしていないようJMSProducer
です。私はSpring 3.2.2を使用しており、CachingConnectionFactory
メッセージを送信するためにキープアライブ設定を使用しています。
メッセージを送信するたびにプロデューサーの数が増え続けます。
私が使用している春のバージョンに関連していますか?
または、構成で何か間違ったことをしていますか?
close()
でメソッドを呼び出す必要がありますMessageProducer
。Javaドキュメントに従って: -
void close() throws JMSException
メッセージ プロデューサーを閉じます。
プロバイダーは、Java 仮想マシンの外部に代わって一部のリソースを割り当てることがあるため
MessageProducer
、クライアントが不要になった場合はそれらを閉じる必要があります。最終的にこれらのリソースを再利用するためにガベージ コレクションに依存するのは、タイムリーではない可能性があります。
春の CachingConnectionFactory ドキュメントによると:-
注: この ConnectionFactory では、共有接続から取得したすべてのセッションを明示的に閉じる必要があります。とにかく、これはネイティブ JMS アクセス コードの通常の推奨事項です。ただし、この ConnectionFactory では、実際にセッションの再利用を可能にするために、その使用が必須です。
したがって、 getSession の代わりに getCachedSessionProxy を呼び出す必要があり、メッセージの送信が完了したら、 close() (finally ブロック内) を呼び出します。ソース コードによると、このセッション プロキシへのクローズ コールは、セッションとメッセージ プロデューサーが再利用されるように処理されます。ゲイリーのコメントは同じことを述べています。