我正在使用 activeMQ 5.3 通过 blazeds 3.2 向 flex 客户端发送消息。
当客户端第一次连接时,我可以看到对 activeMQ 代理的订阅。但是,在我终止运行客户端的浏览器后,即使不再使用任何消息,订阅仍保持打开状态。这最终导致 Web 服务器内存不足。从日志看来,Blazeds 正在退订订阅源。
当没有客户端连接时,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 消息代理(localhost,ID:pcjbe-2026-1260802498843-0:0)开始 ... 与客户联系 ... 2009 年 12 月 14 日 15:55:03,953 [VMTransport] 调试 apache.activemq.broker.TransportConnection - 设置新连接:vm://localhost#4 2009 年 12 月 14 日 15:55:03,968 [VMTransport] DEBUG activemq.broker.region.AbstractRegion - localhost 添加消费者: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 - localhost 添加消费者: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] 使用 clientId 'AEE95CCE-816B-EBCC-2ACE-41508E3338AC' 为目标 'detectorsFeed' 创建的 MessageClient。 ... 断开客户端 ... 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" />
最好的问候