サブスクライバーが存在しない ActiveMQ ブローカーのキューにメッセージを追加すると、キューがいっぱいになり、最終的にプロデューサー スレッドがハングして、それ以上メッセージを発行できなくなります。
問題を解決するために、メッセージに有効期限を設定しました。これによりメモリが解放されると考えましたが、残念ながらこれは機能しません。問題を解決する方法を知っている人はいますか?
私のブローカー ActiveMQ のバージョンは 5.7 で、ブローカーの定義は次のとおりです。
<bean id="mqBroker" class="org.apache.activemq.broker.BrokerService" init-method="start" destroy-method="stop">
<property name="brokerName" value = "mainBroker"/>
<property name="persistent" value="false"/>
<property name="useJmx" value="false"/>
<property name="transportConnectorURIs">
<list>
<value>tcp://localhost:7000</value>
</list>
</property>
</bean>
ブローカーにこれ以上メッセージを発行できない場合に JConsole を見ると、メモリ使用量は良好 (0% の使用率) であり、有効期限切れカウント = 発行済みカウントです。
メッセージを公開するために使用しているコードは、Spring 統合を使用しています。
<jms:outbound-channel-adapter
channel="jsonChannel"
connection-factory="jmsConnectionFactory"
pub-sub-domain="false"
destination-name="MY_QUEUE"
time-to-live="60000"
wxplicit-qos-enabled="true" />