blazeds 3.2 経由でフレックス クライアントにメッセージを送信するために、activeMQ 5.3 を使用しています。
クライアントが初めて接続すると、activeMQ ブローカーへのサブスクリプションが作成されていることがわかります。ただし、クライアントを実行するブラウザーを強制終了した後、メッセージが消費されなくなっても、サブスクリプションは開いたままになります。これにより、最終的に Web サーバーのメモリ不足が発生します。ログから、Blazeds がフィードからサブスクライブを解除しているように見えます。
接続しているクライアントがもういない場合、ブレイズドはサブスクリプションを停止すべきではありません。なぜ彼はそうしないのですか?
以下に、ログ ファイルのスニペットを示します。
... ウェブサーバーを起動しています ... 2009 年 12 月 14 日 15:54:59,015 [main] DEBUG activemq.transport.vm.VMTransportFactory - ブローカーへのバインディング: localhost 2009 年 12 月 14 日 15:54:59,031 [main] INFO apache.activemq.broker.TransportConnector - コネクタ vm://localhost 開始 2009 年 12 月 14 日 15:54:59,031 [main] INFO apache.activemq.broker.BrokerService - ActiveMQ JMS メッセージ ブローカー (ローカルホスト、ID:pcjbe-2026-1260802498843-0:0) が開始されました ... クライアントとの接続 ... 2009 年 12 月 14 日 15:55:03,953 [VMTransport] DEBUG apache.activemq.broker.TransportConnection - 新しい接続の設定: vm://localhost#4 2009 年 12 月 14 日 15:55:03,968 [VMTransport] DEBUG activemq.broker.region.AbstractRegion - コンシューマを追加するローカルホスト: ID:pcjbe-2026-1260802498843-2:2:-1:1 宛先: topic://ActiveMQ.Advisory .TempQueue,topic://ActiveMQ.Advisory.TempTopic 2009 年 12 月 14 日 15:55:03,968 [http-8000-3] INFO flex.messaging.jms.JmsAdapter - クライアント [AEE95CCE-816B-EBCC-2ACE-41508E3338AC] が宛先 [detectorsFeed] にサブスクライブ 2009 年 12 月 14 日 15:55:03,968 [VMTransport] DEBUG activemq.broker.region.AbstractRegion - コンシューマを追加するローカルホスト: ID:pcjbe-2026-1260802498843-2:2:1:1 宛先: topic://tmsng.topic.検出器 2009 年 12 月 14 日 15:55:03,968 [VMTransport] DEBUG activemq.broker.region.AbstractRegion - localhost 追加先: topic://tmsng.topic.detectors 2009 年 12 月 14 日 15:55:03,968 [VMTransport] DEBUG activemq.broker.region.AbstractRegion - localhost 追加先: topic://tmsng.topic.detectors 2009 年 12 月 14 日 15:55:03,968 [VMTransport] DEBUG activemq.broker.region.AbstractRegion - localhost 追加先: topic://ActiveMQ.Advisory.Consumer.Topic.tmsng.topic.detectors [BlazeDS] 12/14/2009 15:55:03.968 [DEBUG] [Client.MessageClient] MessageClient は、宛先 'detectorsFeed' の clientId 'AEE95CCE-816B-EBCC-2ACE-41508E3338AC' で作成されました。 ... クライアントの切断 ... 2009 年 12 月 14 日 15:58:55,156 [http-8000-8] INFO flex.messaging.jms.JmsAdapter - クライアント [AEF0AC64-7B6C-2749-8860-252B8A302EBA] 宛先 [detectorsFeed] から購読解除 [BlazeDS] 12/14/2009 15:58:55.156 [DEBUG] [Client.MessageClient] 宛先「detectorsFeed」の clientId「AEF0AC64-7B6C-2749-8860-252B8A302EBA」を持つ MessageClient が無効になりました。
以下に、ActiveMQ に使用される構成を示します。
<beans xmlns="http://www.springframework.org/schema/beans" ...>
<amq:broker brokerName="localhost" useJmx="true" persistent="false" dataDirectory="${INSTALLDIR}/var" >
<amq:destinationPolicy>
<amq:policyMap>
<amq:policyEntries>
<amq:policyEntry topic=">" producerFlowControl="false">
<amq:pendingSubscriberPolicy>
<amq:vmCursor/>
</amq:pendingSubscriberPolicy>
</amq:policyEntry>
</amq:policyEntries>
</amq:policyMap>
</amq:destinationPolicy>
<amq:managementContext>
<amq:managementContext createConnector="false"/>
</amq:managementContext>
<amq:systemUsage>
<amq:systemUsage sendFailIfNoSpace="true">
<amq:memoryUsage>
<amq:memoryUsage limit="10mb" />
</amq:memoryUsage>
</amq:systemUsage>
</amq:systemUsage>
<amq:transportConnectors>
<amq:transportConnector uri="vm://localhost" />
</amq:transportConnectors>
</amq:broker>
<!-- JMS ConnectionFactory to use, configuring the embedded broker using XML -->
<amq:connectionFactory id="connectionFactory" brokerURL="vm://localhost" alwaysSessionAsync="true">
<amq:prefetchPolicy>
<!-- For pooled connections, set the prefetch to 1 to avoid out-of-order messages. (see http://activemq.apache.org/what-is-the-prefetch-limit-for.html) -->
<amq:prefetchPolicy all="1"/>
</amq:prefetchPolicy>
</amq:connectionFactory>
<!-- a pooling based JMS provider -->
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<property name="connectionFactory" ref="connectionFactory" />
</bean>
<amq:topic id="detectorTopic" physicalName="tmsng.topic.detectors" />
宜しくお願いします