限制ActiveMQ中特定队列的大小

时间:2015-01-05 11:42:32

标签: jms activemq

有没有办法在ActiveMQ中限制队列的大小。就像我有四个队列:Q1,Q2,Q3,Q4和我想要Q3有200 MB的消息它应该阻止直到消息没有消耗,但其他Q1,Q2,Q4正常工作。

2 个答案:

答案 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