activemq内存限制配置与maxPageSize

问题描述

我无法理解两个属性的区别:“ memoryLimit”和“ maxPageSize”

根据文档:

' maxPageSize '='一次一次从商店存储到页面的持久性消息的最大数量'

' memoryLimit '-对应分配给队列的内存存储的内存量

这是队列的示例配置:

<policyEntry queue="Consumer.normal.queue" producerFlowControl="true" memoryLimit="3200" maxPageSize="4" 
maxbrowsePageSize="1000" prioritizedMessages="true" useCache="false" expireMessagesPeriod="0" queuePrefetch="1">

我观察到的是,如果maxPageSize = 1和memoryLimit =“ 3200”,那么我可以看到2条消息已加载到内存中,并且可以通过jms客户端进行浏览(其余消息存储在kahadb中)

如果maxPageSize = 4并且memoryLimit =“ 3200”,那么我可以看到4条消息已加载到内存中,并且可以通过jms客户端进行浏览

那么这两个值是为了达到相同的目的吗? 和 这是否意味着activemq将使用这两个属性中的任何一个提供更多的消息?

解决方法

maxPageSize确定ActiveMQ从商店(在您的情况下为KahaDB)加载给消费者的消息数量。 memoryLimit指示要分配多少内存以将消息保留在内存中。

简而言之,(消息大小x maxPageSize

您希望页面大小大于1或2,ActiveMQ才能执行(200到1000开始)。数值越低,延迟时间就越长。

注意:在大量负载(每天超过1M消息)下,优先级是分布式消息传递中的反模式。它在Java VM进程中的本地嵌入式代理中运行良好。 ActiveMQ默认情况下将其禁用。

要启用优先级支持,请更新