【问题标题】:Limiting Size of a particular queue in ActiveMQ在 ActiveMQ 中限制特定队列的大小
【发布时间】:2015-02-20 16:05:11
【问题描述】:

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

【问题讨论】:

    标签: jms activemq


    【解决方案1】:

    你可以做到,但你必须分步进行。

    有不同类型的内存,例如普通内存“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 系统属性的子对象。

    【讨论】:

    • 这不是经纪人级别的吗?应该排队级别?所以它将适用于所有队列,而不是某些特定队列
    • 这些是针对每个目标的策略设置,因此您通常会设置像 &lt;policyEntry queue="ORDERS.&gt;"&gt; 这样的策略,以使其覆盖以 ORDERS 等开头的所有队列。然后为此队列(或队列集)应用内存限制.
    • 哦..那么它可以工作..也许需要调整命名约定来实现这一点
    【解决方案2】:
    <policyEntry queue="ANOTHER.>" producerFlowControl="true" memoryLimit="12 kb">            
    

    不将队列大小限制为 12 kb

    【讨论】:

    • 您应该编辑以前的帖子,而不是再次发布本质上相同的内容。
    猜你喜欢
    • 1970-01-01
    • 2016-10-30
    • 2020-09-02
    • 1970-01-01
    • 2012-03-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    相关资源
    最近更新 更多