限制 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
有没有办法在 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