Ste*_*nia 6 java tomcat activemq-classic jms web
我正在开发一个由一些模块组成的应用程序.在其中一个模块中,有人创建了一个主题生成器,用于发布关于主题的消息,但是该模块没有主题消费者来使消息出列.主题生产者使用生存时间属性设置为300000毫秒setTimeToLive().
我希望如果没有消费者,消息将在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服务器也是有效的.
结束编辑.
引用创建健壮的JMS应用程序:
5.1.4允许消息过期
[...]
当消息被发布,指定的传输TimeToLive被添加到当前的时间,得到的期满时间。在指定的到期时间之前未传递的任何邮件都将被销毁。
来自以下来源的另一句话javax.jms.Message#getJMSExpiration():
当到达邮件的到期时间时,提供者应丢弃。[...]
客户端不应收到已过期的消息;但是,JMS API 不能保证不会发生这种情况。
因此,对于非长期订阅者:
因此,在您的情况下,如果没有使用者,则消息可能根本不会存储。 入队计数增加,并且过期计数保持为0。仅在已连接(但处于空闲)订户的情况下,过期计数才应增加。
入队计数-自上次重启以来发送到队列的消息总数
计数-过期计数-由于过期而未传递的消息数
注意:使用JBoss 7进行的测试表明,在这种情况下,该消息不会在客户端中出现。
| 归档时间: |
|
| 查看次数: |
12885 次 |
| 最近记录: |