概述

通常,我们不希望系统中存在长时间离线的持久订阅者,因为Broker需要为它们保留它们订阅的topic的所有消息。而且随着时间的推移,将会导致达到存储限制,从而导致系统变慢。

当然,你可以通过JConsole或Web Console等管理工具来手动取消不活跃的持久订阅者。但显然可以餐区更多措施来帮助管理。

过期消息

一些应用程序发送的消息有一定的过期时间。如果这些消息存储在Broker上供离线的持久订阅者使用,我们需要在它们到期时将其删除。就像我们的队列一样,现在默认是每30秒检查一次这些消息,可以使用适当的目标策略进行调整。

1
<policyEntry topic=">" expireMessagesPeriod="300000"/>

如上配置,broker每5分钟检查一次过期的消息。

移除不活跃的订阅者

我们可以自动取消在一段时间内不活跃的持久订阅者。

配置示例如下:

1
<broker name="localhost" offlineDurableSubscriberTimeout="86400000" offlineDurableSubscriberTaskSchedule="3600000">

属性 默认值 描述
offlineDurableSubscriberTimeout -1 我们删除非活动持久性订阅者的时间(以毫秒为单位)。 默认值-1,表示不删除它们
offlineDurableSubscriberTaskSchedule 300000 检查频率(以毫秒为单位)

上面的配置示例,表明broker会每小时检查并删除已离线1天的订阅者。

参考:http://activemq.apache.org/manage-durable-subscribers.html