We use Spring (3.2.4) with ActiveMQ (5.8.0) in Tomcat (7.0.41) and it is not clear what the best usage. We want to use JmsTemplate to produce and MessageListenerContainer to receive messages.
Should we use caching in receiver side? (related link)
Works CachingConnectionFactory with ActiveMQ and failover? (related link)
Need to set useAsyncSend="true" when we use PooledConnectionFactory? (related link)
2 に答える
ここから:
PooledConnectionFactory と CachingConnectionFactory の違いは、実装の違いです。以下は、それらの間で異なる特性の一部です。
PooledConnectionFactory と CachingConnectionFactory は両方とも、それぞれが接続、セッション、およびプロデューサーをプールすると述べていますが、PooledConnectionFactory は実際には複数のプロデューサーのキャッシュを作成しません。シングルトン パターンを使用して、要求されたときに単一のキャッシュされたプロデューサーを渡すだけです。一方、CachingConnectionFactory は実際には複数のプロデューサーを含むキャッシュを作成し、要求されたときにキャッシュから 1 つのプロデューサーを渡します。
PooledConnectionFactory は、JMS セッションをプールするための Apache Commons Pool プロジェクトの上に構築されています。Commons プールには PooledConnectionFactory によって使用されていない機能があるため、これにより、プールに対する追加の制御が可能になります。これらの追加機能には、ブロックの代わりにプール サイズを拡大する、プールが使い果たされたときに例外をスローする、などが含まれます。これらの機能を利用するには、独自のカスタマイズされた設定を使用して独自の Commons Pool GenericObjectPool を作成し、そのオブジェクトを PooledConnectionFactory を介して渡します。 setPoolFactory メソッド。追加情報については、次を参照してください: http://commons.apache.org/pool/api-1.4/org/apache/commons/pool/impl/GenericObjectPoolFactory.html
CachingConnectionFactory には、コンシューマーもキャッシュする機能があります。この機能を使用するときは注意して、ブログ投稿に記載されているルールに従ってコンシューマーがキャッシュされることを確認してください。
しかし、最も重要なことは、CachingConnectionFactory が JMS 準拠の MOM で動作することです。JMS 接続ファクトリーのみが必要です。これは、エンタープライズ組織で非常に一般的な複数の MOM ベンダーを使用している場合に重要です (これは主にレガシーおよび既存のプロジェクトによるものです)。重要な点は、CachingConnectionFactory が ActiveMQ だけでなく、さまざまな MOM 実装で非常にうまく機能することです。
ここから:
ActiveMQ をクラスター化し、フェイルオーバー トランスポートを使用している場合、CachingConnectionFactory は適切な選択ではないことが報告されています。
私が抱えている問題は、一方のボックスがダウンした場合、もう一方のボックスでメッセージの送信を開始する必要があることですが、まだ古い接続を使用しているようです (すべての送信がタイムアウトします)。プログラムを再起動すると、再び接続され、すべてが機能します。出典: ActiveMQ と CachingConnectionFactory の自動再接続の問題
問題は、失敗した ActiveMQ へのキャッシュされた接続がまだ使用されていたため、ユーザーに問題が発生したことです。ここで、このシナリオの選択肢は PooledConnectionFactory です。
現在 ActiveMQ を使用していて、将来他のブローカー (JBoss MQ、WebSphere MQ) に切り替える可能性がある場合は、PooledConnectionFactory を使用しないでください。コードが ActiveMQ に緊密に結合されるためです。