ActiveMQ目标策略和系统使用配置

ActiveMQ目标策略和系统使用配置,activemq,Activemq,正在寻找有关systemUsage和destinationPolicy配置的帮助,因为我很难完全理解systemUsage、destinationPolicy和流控制之间的关系 我们所有的信息都是持久的!producerFlowControl已打开 所以我们给ActiveMQ一个最大512MB的堆空间 我们的系统使用设置如下: <systemUsage> <systemUsage> <memoryUsage> &

正在寻找有关systemUsage和destinationPolicy配置的帮助,因为我很难完全理解systemUsage、destinationPolicy和流控制之间的关系

我们所有的信息都是持久的!producerFlowControl已打开

所以我们给ActiveMQ一个最大512MB的堆空间

我们的系统使用设置如下:

<systemUsage>
    <systemUsage>
        <memoryUsage>
            <memoryUsage limit="200 mb"/>
        </memoryUsage>
        <storeUsage>
            <storeUsage limit="10 gb"/>
        </storeUsage>
        <tempUsage>
            <tempUsage limit="1000 mb"/>
        </tempUsage>
    </systemUsage>
</systemUsage>
<destinationPolicy>
    <policyMap>
      <policyEntries>
        <policyEntry topic=">" producerFlowControl="true" memoryLimit="1mb"> 
          <pendingSubscriberPolicy>
          </pendingSubscriberPolicy>
        </policyEntry>
        <policyEntry queue=">" producerFlowControl="true" memoryLimit="1mb"> 
        </policyEntry>
      </policyEntries>
    </policyMap>
</destinationPolicy>

我们的目的地政策如下:

<systemUsage>
    <systemUsage>
        <memoryUsage>
            <memoryUsage limit="200 mb"/>
        </memoryUsage>
        <storeUsage>
            <storeUsage limit="10 gb"/>
        </storeUsage>
        <tempUsage>
            <tempUsage limit="1000 mb"/>
        </tempUsage>
    </systemUsage>
</systemUsage>
<destinationPolicy>
    <policyMap>
      <policyEntries>
        <policyEntry topic=">" producerFlowControl="true" memoryLimit="1mb"> 
          <pendingSubscriberPolicy>
          </pendingSubscriberPolicy>
        </policyEntry>
        <policyEntry queue=">" producerFlowControl="true" memoryLimit="1mb"> 
        </policyEntry>
      </policyEntries>
    </policyMap>
</destinationPolicy>

是否有人可以验证以下各项是否正确:

这意味着对于每个队列/主题,内存限制为1MB。当这个1MB被命中时,队列会阻止制作者,还是会分页到光盘

所有队列和主题的总允许内存为200MB。这意味着我们可以有200个通道以1MB的全容量运行。我们目前总共有16个队列和主题,显然这是永远无法到达的

我们是否最好删除内存限制上的单个策略项,并在各个通道之间共享内存

如果我们这样做,他们会在什么时候阻止


非常感谢任何帮助!贝宝能给你一些啤酒钱吗

你在这里提到了很多问题,我将按顺序回答

memoryUsage对应于分配给内存中存储的内存量。storeUsage对应于应为KahaDB商店提供多少空间。您可以使用其中一个,这取决于您是否希望代理持久化消息。tempUsage是文件游标的特例(http://activemq.apache.org/message-cursors.html)-一种在超过内存限制时将内存从内存存储溢出到磁盘的机制(如果需要,必须在目标级别配置此行为)

policyEntry@memoryLimit是单个目的地的子限额

超出内存限制时会发生什么情况取决于是否启用了生产者流量控制(PFC)。默认情况下,对于队列,它是打开的,对于主题和异步发送到队列,它是关闭的;所有这些都可以在policyEntry中配置(http://activemq.apache.org/per-destination-policies.html)

当PFC开启时,如果您达到“内存限制”,您的客户端将阻塞,直到有人通过使用商店中的消息释放空间。如果关闭,发送将抛出一个异常(客户端优于代理)。“内存限制”是指memoryUsage在所有队列中定义的限制,或者是队列特定的限制(可能先达到前者,后达到后者)


您是否需要特定于目的地的限制取决于您的用例。我建议您忽略它,除非您试图实现特定的结果。

请注意,如果您达到内存限制,在其他人释放空间之前,对于事务处理的消费者,队列也会显示为“空”。而且——游标基本上只在“内存限制用完时存储非持久性消息”时有用,对吗?