我正在尝试清除activeMQ中的非活动队列
<amq:broker persistent="true" useJmx="true" schedulePeriodForDestinationPurge="1000">
<amq:destinationPolicy>
<amq:policyMap>
<amq:policyEntries>
<amq:policyEntry queue="queue.>" gcInactiveDestinations="true" inactiveTimoutBeforeGC="5000" />
</amq:policyEntries>
</amq:policyMap>
</amq:destinationPolicy>正如我所读到的,当有0条消息并且没有新的生产者/消费者时,队列是非活动的。
我使用jmsTemplate发送进程,如下所示:
//Creates an org.springframework.jms.connection.CachingConnectionFactory
conn = jmsTemplate.getConnectionFactory().createConnection();
session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
...
jmsTemplate.convertAndSend(destinationQueue, messageDTO);
....
session.close();
conn.close();在调用convertAndSend方法时,生产者和队列被创建,但是当发送完成时,生产者仍然是活动的(jconsole表示producerCount=1),尽管我关闭了会话和连接,因此队列不会被清除。
为什么没有删除producer?会影响使用cachingconnectingfactory吗?
谢谢!
发布于 2013-05-23 07:14:57
你是正确的。
您之所以看到这种行为,是因为CachingConnectionFactory的默认设置是
添加会话缓存以及MessageProducer和使用者缓存的
SingleConnectionFactory子类
正如在spring doc中提到的,当在缓存的会话上调用()时,它并不是真正关闭的,而是被缓存以供重用。生产者也被缓存。
如果您使用过SingleConnectionFactory,您会看到生产者清理,但在选择正确的连接工厂之前,还有其他事情需要考虑。
如果您想使用CachingConnectionFactory,您可以通过设置来禁止producers被缓存:
<property name="cacheProducers" value="false" />你也可以为消费者做类似的设置。
https://stackoverflow.com/questions/16693134
复制相似问题