有没有办法在ActiveMQ中限制队列的大小。就像我有四个队列:Q1,Q2,Q3,Q4和我想要Q3有200 MB的消息它应该阻止直到消息没有消耗,但其他Q1,Q2,Q4正常工作。
答案 0 :(得分:1)
你可以做到,但你必须分步进行。
存在不同类型的存储器,例如普通存储器和#34; RAM"或持久存储中的磁盘空间。您必须单独配置它们。从那时起" RAM"内存已用完,消息被换出并从存储中取出(取决于配置)。
但是,您希望系统范围限制,如下所示:
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage percentOfJvmHeap="70" />
</memoryUsage>
<storeUsage>
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
将这些条目作为起点,您可以应用限制某些队列的per-destination-policies。这被设置为系统内存的百分比,因此您需要进行一些计算。
根据您想要的效果,使用storeUsageHighWaterMark
和/或cursorMemoryHighWaterMark
。请注意,存储不用于非持久性消息。
对于基本内存限制,您还可以使用目标策略上的memoryLimit
设置。它是memoryUsage
系统属性的孩子。
答案 1 :(得分:-1)
<policyEntry queue="ANOTHER.>" producerFlowControl="true" memoryLimit="12 kb">
不限制队列大小为12 kb