首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jmsTemplate清除非活动队列

使用jmsTemplate清除非活动队列
EN

Stack Overflow用户
提问于 2013-05-22 21:30:09
回答 1查看 655关注 0票数 1

我正在尝试清除activeMQ中的非活动队列

代码语言:javascript
复制
<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发送进程,如下所示:

代码语言:javascript
复制
//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吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-23 07:14:57

你是正确的。

您之所以看到这种行为,是因为CachingConnectionFactory的默认设置是

添加会话缓存以及MessageProducer和使用者缓存的

SingleConnectionFactory子类

正如在spring doc中提到的,当在缓存的会话上调用()时,它并不是真正关闭的,而是被缓存以供重用。生产者也被缓存。

如果您使用过SingleConnectionFactory,您会看到生产者清理,但在选择正确的连接工厂之前,还有其他事情需要考虑。

如果您想使用CachingConnectionFactory,您可以通过设置来禁止producers被缓存:

代码语言:javascript
复制
<property name="cacheProducers" value="false" />

你也可以为消费者做类似的设置。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16693134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档