Stack 超过内存限制后,ActiveMQ开始从队列中删除消息

Stack 超过内存限制后,ActiveMQ开始从队列中删除消息,stack,activemq,fifo,Stack,Activemq,Fifo,在我们的项目中,我需要将消息推送到ActiveMQ并保持它们的持久性。当我发送新消息且内存限制超过时,应将队列中最旧的消息从队列中删除或替换为新消息 我不想清除整个队列,队列的工作方式类似于我们产品的故障保护消息积压,所以我需要保留队列中最后x个数量的消息 我试着从谷歌上看,但到目前为止运气不好 这是我的策略设置.xml <destinationPolicy> <policyMap> <policyEntries>

在我们的项目中,我需要将消息推送到ActiveMQ并保持它们的持久性。当我发送新消息且内存限制超过时,应将队列中最旧的消息从队列中删除或替换为新消息

我不想清除整个队列,队列的工作方式类似于我们产品的故障保护消息积压,所以我需要保留队列中最后x个数量的消息

我试着从谷歌上看,但到目前为止运气不好

这是我的策略设置.xml

    <destinationPolicy>
        <policyMap>
          <policyEntries>
              <policyEntry queue=">" producerFlowControl="false" memoryLimit="5mb"  > 

                   <messageEvictionStrategy>
                    <oldestMessageEvictionStrategy/>
                   </messageEvictionStrategy>

            <pendingMessageLimitStrategy>
                <constantPendingMessageLimitStrategy limit="100"/>
            </pendingMessageLimitStrategy>

                 </policyEntry>
          </policyEntries>
        </policyMap>
    </destinationPolicy>

逐出策略对象仅适用于主题,您不能在队列上使用它们,因为队列的服务约定是,它存储所有消息,直到它们被消费或其生命周期通过设置的TTL值过期为止。代理可以将队列中的消息存储到磁盘,从而将它们从内存中删除,但对于主题,契约更为松散,逐出策略允许删除内存中等待分派给主题使用者的消息


您只能通过TTL值控制队列中消息的生存期。

逐出策略对象仅适用于主题,您不能在队列上使用它们,因为队列的服务约定是,它存储所有消息,直到它们被消费或通过设置的TTL值生存期到期为止。代理可以将队列中的消息存储到磁盘,从而将它们从内存中删除,但对于主题,契约更为松散,逐出策略允许删除内存中等待分派给主题使用者的消息


您只能通过TTL值来控制队列中消息的生存期。

您无法从磁盘删除持久消息,除非我们删除或使用它。您可以启用producerFlowControl来限制producer,以便它在使用队列中的旧消息后接受新的menage,或者按照Tim的建议在消息上设置TTL

除非我们删除或使用持久消息,否则您无法从磁盘中删除它。您可以启用producerFlowControl来限制producer,以便它在使用队列中的旧消息后接受新的menage,或者按照Tim的建议在消息上设置TTL