JMSクライアントは、その後、典型的なコードは次のようであるMQブローカーに接続しようとするたびに:それは接続を閉じていない場合は、JMSクライアント(プロデューサ/コンシューマ)が行われた後、今
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
connection = connectionFactory.createConnection();
そのJMSクライアントは引き続きMQブローカとの接続を維持し、MQブローカとの接続を占有します。あなたの場合、あなたのJMSクライアントコードが "間違いかもしれない"ように見えて、接続を閉じないので、あなたのJMSクライアントコードをチェックして、以下のように接続を閉じる必要があります。
今
if (connection != null) {
connection.close();
}
は、あなたがあなたのJMSクライアントにメッセージリスナを持っているならば、接続が開いたままであろうと予想されますが、これらの接続は、いくつかの時間後に完全に不活性である場合に場合には、あなたが最大非アクティブを指定できることを言いましたあなたはMQブローカーとの接続を作成するとき、あなたがより多くの詳細については、このcf = new ActiveMQConnectionFactory( "tcp://localhost:61616?wireFormat=openwire&wireFormat.maxInactivityDuration=<<whatever_value_you_want>>");
読むthis ActiveMQのドキュメントのように作成する必要があり、このため、wireFormat.maxInactivityDuration
を使用して接続のための期間。 FYIとして
- ActiveMQのブローカーに接続の最大数は、これだけでは、その内部にあなたは下記のように使用すると、最大接続(?maximumConnections=1000
)で定義transportConnectors
要素を有して、その設定ファイルactivemq.xml
を使用して定義されあなたが適切なシステムリソースを持っていて、より多くのクライアント接続を得る能力を持っていれば、それを増やすことができます。 <transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
こんにちは@ハグラウォール再生のためにありがとう、あなたは私のコードですべての接続を閉じているとチェックしていると言ったようにconnection.close(); 、case1:実際には、ユーザーがWebでログインするときに、ユーザーがログアウトしたりセッションが終了したときに閉じるべきでないTCP接続を介してトピックに登録されたときです。 – user4045063
ケース2:キューにメッセージを配置するときエンドユーザーのインターネット接続が妨げられ、MQが要求された使用に応答して接続を維持できない。 activemq.xmlで任意の変更を行うことができます。これは、時間の経過後に接続を閉じることができます。 – user4045063
あなたのケース1について:言及したように、明らかに問題は、ユーザーがログアウトしたとき、またはセッションが終了したときに接続を閉じる必要があることです。ケース2の場合:最大休止時間を指定できますが、同様の方法でタイムアウトパラメータを設定できます(http://activemq.apache.org/tcp-transport-reference.html)。あなたのケースを見ると、低速のコンシューマーを設定する必要があると思います。https://planet.jboss.org/post/coming_in_activemq_5_9_a_new_way_to_abort_slow_consumers – hagrawal