限制 ActiveMQ 中特定队列的大小

Limiting Size of a particular queue in ActiveMQ

有没有办法在 ActiveMQ 中限制队列的大小。就像我有四个队列:Q1、Q2、Q3、Q4,我希望当 Q3 有 200 MB 的消息时它应该阻塞直到消息未被消耗,但其他 Q1、Q2、Q4 正常运行。

可以做到,但要分步进行。

有不同类型的内存,如持久存储中的普通内存 "RAM" 或磁盘 space。您必须单独配置它们。因为当 "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 and/or cursorMemoryHighWaterMark 取决于你想要的效果。请注意,存储不用于非持久性消息。

对于基本内存限制,您还可以使用目标策略上的 memoryLimit 设置。这是 child 到 memoryUsage 系统 属性。

<policyEntry queue="ANOTHER.>" producerFlowControl="true" memoryLimit="12 kb">            

不将队列大小限制为 12 kb