我需要在JMS主题中为我的消息设置消息过期。我试过设置message.setJMSExpiration()和producer.getTimeToLive()方法的属性。但是我不这么认为我发布的消息仍然存在于我发布的主题中。
我怀疑这些属性是否用于在到期时间到达之后丢弃主题中的未订阅消息?或者在特定订户订阅的消息之后。
我使用了选择器来识别特定的客户端。
如果以上任何属性不足以使消息过期,那么我是否需要任何其他配置才能使消息在生产者方面过期?
使用Apache ActiveMQ 5.8.0和JDK 1.6
答案 0 :(得分:0)
我的两分钱信息。希望这可以帮助您找出问题所在。
有两种类型的订阅:持久订阅和非持久订阅,订阅者(或创建订阅的应用程序)分别称为持久订阅者和非持久订阅者。
只要应用程序正在运行,非持久订阅者就会收到发布。即使接收应用程序未运行,持久订阅也会收到发布。持久订阅由存储(通常是队列)支持,而消息传递提供程序在应用程序未运行时将发布放入存储中。
如果没有主题订阅,Messaging Provider将简单地丢弃该出版物。
消息到期(a.k.a TimeToLive)适用于这两种类型的订阅。如果订户应用程序在到期之前没有收到消息,则此类消息将过期,并且不会传递给接收应用程序。
消息只能在生产者发布到Messaging Provider后才会过期。
答案 1 :(得分:0)
1)根据JMS规范,必须在Producer对象上设置所有QoS设置(持久性,到期(即TTL)和优先级。在Message对象上设置时,它们将被忽略。
2)需要查看客户端代码以验证TTL的值是否设置正确。
3)TTL值是消息到期的时间(以毫秒为单位,即5分钟为300000),而不是来自EPOCH的时间。