2017-08-07 8 views
0

私はactivemq、camel、およびspringの組み合わせを使用しています。キューの場合、複数のコンシューマが存在します。一部のキュー消費者では、保留中のメッセージ(プリフェッチと同じ100まで)があり、同じキューの他のコンシューマを除いて処理されていないことがわかります。キュー消費者には保留中のメッセージがありますが、処理されません。

私は、何が起こっているのかをより深く見て、スプリングキャッシングコネクティビティがこの問題を引き起こしている可能性があることを知りました。このキャッシュ接続ファクトリによって、一部のクライアントが非アクティブになり、プリフェッチバッファに残ったメッセージが処理されないことが考えられます。私たちの発見には正しいのですか?

これ以外にも、非アクティブなコンシューマからリリースされたプリフェッチバッファからメッセージを取得する方法はありますか?

答えて

2

可変同時実行性のあるCachingConnectionFactoryを使用しないでください。また、コンシューマのキャッシュを無効にする必要があります。 DefaultMessageListenerContainerのjavadocsを参照してください。

* <p><b>Note: Don't use Spring's {@link org.springframework.jms.connection.CachingConnectionFactory} 
* in combination with dynamic scaling.</b> Ideally, don't use it with a message 
* listener container at all, since it is generally preferable to let the 
* listener container itself handle appropriate caching within its lifecycle. 

アイドル状態のコンシューマは、キャッシュに入れられます。

+0

ありがとう、それも私たちの発見です。非アクティブなコンシューマでスタックされたメッセージを取得する方法はありますか? –

+1

いいえ。ボリュームが再び増加し、消費者がキャッシュからチェックアウトされていない場合を除きます。 –

関連する問題