2016-09-27 26 views
0

私のアプリケーションが制御されたメンテナンスモードになっている間、すべてのコンシューマ/メッセージリスナを便利に一時停止する方法を理解しようとしています。アプリケーションは、ActiveMQ 5.13.3クライアントライブラリを使用しています。ActiveMQ:接続プーリングを使用するとコンシューマを一時停止/再開する

いくつかの時間前に私はActiveMQConnectionFactoryからPooledConnectionFactoryに1つのものに切り替えました。接続プールから接続を(=フェッチ)、それらが行われたときに、それを「閉じる」、プールに戻す「作成」

ActiveMQConnectionFactory amcf = new ActiveMQConnectionFactory(config.getMessageBrokerUrl()); 
amcf.setTrustedPackages(Arrays.asList(new String[] { 
    "some.package.or.other", 
    "java.lang", 
    "java.util" 
})); 

connectionFactory = new PooledConnectionFactory(amcf); 
connectionFactory.setCreateConnectionOnStartup(true); 

消費者と生産者:そうのように設定されています。明らかにMessageListenersの場合、起動時に1回取得され、アプリケーションシャットダウン時に返されます。

ActiveMQConnection.stop()それが着信メッセージの接続の配信を一時的に停止します。私が欲しいものにぴったりですが、プールには明らかに多くの接続が含まれています。

どのように休止しますかすべて ActiveMQ接続プールの接続?

答えて

0

私はプールされた接続プールを使用してメッセージ配信を一時停止する他の手段に頼らなければならないと思います。たとえば、DMLCを使用しているときにこの質問を参照してください(あなたには当てはまりません)。Start and Stop JMS Listener using Spring

ブローカ側からそのキューを一時停止することもできます。キューのJMX MBeanに一時停止/再開操作があります。添付のスクリーンショットを参照してください。

クライアントの一時停止に関する質問には答えませんが、問題を解決する可能性があります。

pause queue jmx operation in jconsole

+0

ありがとうございます。キューを一時停止することは私にとっては解決策ではなく、他のクライアントは依然としてその上で通信します。ユースケースは、クラスタの個々のノードのシャットダウン制御です。私は接続よりもむしろmessageListenersを停止する方法を検討します。 – Hank

関連する問題