JMS消息过期无效



我需要在JMS主题中为我的消息设置消息过期。我尝试过设置message.setJMSExpiration()和producer. gettimeolive()方法的属性。但是我不认为我发布的消息还在我发布的主题中存在。

我的疑问是这些属性是否用于在到期时间到达后从主题丢弃未订阅的消息?或在特定订阅者订阅的消息之后。

我已经使用选择器来识别特定的客户端。

如果上述任何属性都不足以使消息过期,那么我是否需要任何其他配置来使消息在生产者端过期?

我使用的是Apache ActiveMQ 5.8.0和JDK 1.6

我的两分信息。希望这能帮助你找出你的问题。

订阅有两种类型,持久和非持久订阅,订阅者(或创建订阅的应用程序)分别称为持久和非持久订阅者。

只要应用程序正在运行,非持久订阅者就会接收发布。持久订阅即使在接收应用程序未运行时也会接收发布。持久订阅由存储(通常是队列)支持,消息传递提供程序在应用程序不运行时将发布放入存储中。

如果某个主题没有订阅,消息传递提供程序将直接放弃该发布。

消息过期(又名timeolive)适用于两种类型的订阅。如果订阅者应用程序在到期前未收到消息,则该消息将过期,并且不会传递给接收应用程序。

消息只有在生产者将消息发布到消息提供程序后才能过期。

1)根据JMS规范,必须在Producer对象上设置所有QoS设置(持久性、过期(即TTL)和优先级)。当在Message对象上设置时,它们将被忽略。

2)需要查看客户端代码来验证TTL的值是否设置正确。

3) TTL值是以毫秒为单位的消息过期时间(即300000 5分钟),而不是来自EPOCH的时间。

最新更新