在我们的项目中,我需要将消息推送到ActiveMQ并保持它们的持久性。当我发送新消息并且内存限制超过时,队列中的最旧消息应该从队列中删除/删除或替换为新消息。
我不想清除整个队列,队列就像我们产品的故障安全消息积压一样,所以我需要在队列中保留最后x个消息量。
我试图从谷歌看,到目前为止没有运气。
这是我的策略settings.xml
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" producerFlowControl="false" memoryLimit="5mb" >
<messageEvictionStrategy>
<oldestMessageEvictionStrategy/>
</messageEvictionStrategy>
<pendingMessageLimitStrategy>
<constantPendingMessageLimitStrategy limit="100"/>
</pendingMessageLimitStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
答案 0 :(得分:1)
驱逐策略对象仅适用于主题,您不能在队列中使用它们,因为队列的服务合同是它存储所有消息,直到它们被消耗或其生命周期通过设置的TTL值到期。代理可以将队列中的消息存储到磁盘,从而将其从内存中删除,但是对于主题,合同更宽松,并且逐出策略允许等待分派给主题消费者的内存中的消息被丢弃。
您只能通过TTL值控制队列中邮件的生命周期。
答案 1 :(得分:0)
除非我们删除或使用它,否则您无法从磁盘中删除持久性消息。您可以启用producerFlowControl来限制生产者,以便在从队列中消耗旧消息后接收新的menage,或者Tim建议在消息上设置TTL。