activemq内存限制配置与maxPageSize

activemq内存限制配置与maxPageSize,activemq,Activemq,我无法理解这两个属性的区别:“MemoryLit”和“maxPageSize” 根据文件: “maxPageSize”=“一次从存储区翻页的最大持久消息数” “MemoryLit”-对应于为队列分配给内存中存储的内存量 以下是队列的示例配置: <policyEntry queue="Consumer.normal.queue" producerFlowControl="true" memoryLimit="3200" maxPag

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

根据文件:

maxPageSize”=“一次从存储区翻页的最大持久消息数”

MemoryLit”-对应于为队列分配给内存中存储的内存量

以下是队列的示例配置:

<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)加载多少消息到消费者手中。MemoryLit指示要分配多少内存以将消息保留在内存中


简言之,(message size x maxPageSize也尝试使用maxPageSize=8和16保持memoryLimit=3200的恒定值,并且在这两种情况下都可以在内存中看到8和16条可用消息。我们需要实现消息的优先级,以便获得更高的优先级(9)消息是提供给消费者的,因此我们正在尝试限制页面大小。您能否详细阐述一下您关于
生产者流控制的观点
?另外,如果内存限制值仅能容纳2条消息,但每次我都能看到加载的消息数量是由maxPageSize驱动的,因此我无法理解这是如何实现的当超过内存限制时可能发生什么?为什么要使用优先级?优先级是分布式消息传递的反模式。如果需要优先级,请将消息分隔到不同的队列中。ActiveMQ支持复合侦听,因此您可以执行session.createQueue(“FOO.P9,FOO.P8,FOO.P7”)等等,因此消费者获得队列的所有消息,而P9通常会很快被消费,因为它的队列大小通常会更低