【发布时间】:2013-09-01 16:32:22
【问题描述】:
我正在开发一个由一些模块组成的应用程序。在其中一个模块中,有人创建了一个主题生产者,该主题生产者在主题上发布消息,但该模块没有主题消费者来使消息出列。主题生产者使用setTimeToLive() 将生存时间属性设置为 300000 毫秒。
我希望如果没有消费者,消息会在 300000 毫秒内过期并被释放。
该应用程序部署在 Tomcat 6.0.36 上,它使用外部 ActiveMQ 服务器来处理队列和主题。
Monitoring ActiveMQ with Java VisualVM in the MBeans tab in the MBeans tab in the topic settings 我看到变量“Enqueue Count”增加了,但我不明白生存时间设置是否对这些消息生效。我预计会看到计数器“ExpiredCount”增加,但它仍然固定为 0。
有没有办法了解这些消息是否仍保留在内存中或是否已被释放?
非常感谢!
编辑:
我在 netbeans 7.3 上使用 j2ee 教程示例进行了一些测试,使用内部 glassfish 3.1 作为服务器,使用 jvisualvm 监控它,所有工作都按照 api 所说:
JMS API 不提供浏览主题的机制。消息通常会从 主题一出现:如果没有消息消费者消费它们,JMS 提供者删除它们。尽管持久订阅允许消息在消息消费者不活动时保留在主题上,但不存在检查它们的工具。
我读到 glassfish 在 activeMQ 中使用,所以我希望这对独立的 ActiveMQ 服务器也有效。
结束编辑。
【问题讨论】:
-
主题持久吗?
-
在哪里/如何查看此设置?
-
你使用的是
topicSession.createSubscriber(...)还是topicSession.createDurableSubscriber(...)? -
使用以下指令创建生产者:producer = jmsTopicSession.createProducer(topic);。不使用创建订阅者。这是错的吗?或者它会给我们带来一些问题?
-
我认为您应该阅读以下内容:activemq.2283324.n4.nabble.com/…
标签: java tomcat web jms activemq