问题描述
我无法理解两个属性的区别:“ 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默认情况下将其禁用。
要启用优先级支持,请更新