Java 生命的时刻
我正在开发一个由一些模块组成的应用程序。在其中一个模块中,有人创建了一个主题生产者来发布关于主题的消息,但是这个模块没有主题消费者来对消息进行排队。主题制作人使用Java 生命的时刻,java,tomcat,web,jms,activemq,Java,Tomcat,Web,Jms,Activemq,我正在开发一个由一些模块组成的应用程序。在其中一个模块中,有人创建了一个主题生产者来发布关于主题的消息,但是这个模块没有主题消费者来对消息进行排队。主题制作人使用setTimeToLive()将生存时间属性设置为300000毫秒 我预计,如果没有消费者,消息将在300000毫秒内过期,并被释放 该应用程序部署在Tomcat 6.0.36上,它使用外部ActiveMQ服务器来处理队列和主题 在主题设置下的MBeans选项卡中使用Java VisualVM监视ActiveMQ我看到变量“Enqueu
setTimeToLive()
将生存时间属性设置为300000毫秒
我预计,如果没有消费者,消息将在300000毫秒内过期,并被释放
该应用程序部署在Tomcat 6.0.36上,它使用外部ActiveMQ服务器来处理队列和主题
在主题设置下的MBeans选项卡中使用Java VisualVM监视ActiveMQ我看到变量“Enqueue Count”在增长,但我不知道生存时间设置是否对这些消息生效。我希望看到计数器“ExpiredCount”增加,但它仍然固定为0
有没有办法了解这些消息是否仍保留在内存中,或者它们是否被释放
多谢各位
编辑:
我在netbeans 7.3上使用j2ee教程示例进行了一些测试,使用内部glassfish 3.1作为服务器,使用jvisualvm对其进行监控,所有工作如api所述:
JMS API不提供浏览主题的机制。消息通常会从文件中消失
主题:如果没有消息使用者使用它们,JMS
提供者将删除它们。尽管持久订阅允许邮件在邮件使用者未处于活动状态时保留在主题>,但不存在检查邮件的工具
我读到glassfish在activeMQ中使用,所以我希望这对于独立的activeMQ服务器也是有效的
结束编辑。引用自:
5.1.4允许邮件过期[…]
当消息发布时,指定的timeToLive将添加到当前时间,以给出过期时间。在指定过期时间之前未传递的任何邮件都将被销毁 另一段引用自
javax.jms.Message#getJMSExpiration()
的源代码:
当消息过期时,提供者应放弃它。
[…]客户端不应接收已过期的邮件;然而,jmsapi并不保证这不会发生 因此,对于非持久订户:
Expired Count—由于过期而未传递的邮件数
注意:使用JBoss 7进行的测试表明,在这种情况下,消息不会出现在客户端。主题是否持久?在哪里/如何查看此设置?您使用的是
topicSession.createSubscriber(…)
还是topicSession.createDurableSubscriber(…)
?使用以下指令创建生产者:producer=jmsTopicSession.createProducer(主题);。未使用创建订阅服务器。这是错的吗?或者它会给我们带来一些问题吗?我想你应该读一下:你知道我可以用什么方法来验证消息是否真的没有被存储吗?你可以设置一个测试程序,它会不断发送关于某个主题的大量消息(没有任何消费者)。查看计数器和堆大小。这还不是"对",;否则你必须查看代码。我收到过期的消息。有人能帮忙吗?