ActiveMQ-如何为某些队列保留存储空间?
我使用ActiveMQ作为外部应用程序的消息服务器,但也用于内部消息 如果我的应用程序宕机时间过长,则外部应用程序将充满ActiveMq服务器。但当我重新启动它时,它不能使用消息,因为它不能发送“内部”消息(我的路由是事务性的)。所以整个系统都被封锁了 有没有办法为我的内部邮件预留一些存储空间?或者可以限制某些队列的大小吗 谢谢是的,您可以使用和生产者流控制来限制所有或特定队列消耗的最大内存。在activemq.xml中,您需要添加如下部分:ActiveMQ-如何为某些队列保留存储空间?,activemq,Activemq,我使用ActiveMQ作为外部应用程序的消息服务器,但也用于内部消息 如果我的应用程序宕机时间过长,则外部应用程序将充满ActiveMq服务器。但当我重新启动它时,它不能使用消息,因为它不能发送“内部”消息(我的路由是事务性的)。所以整个系统都被封锁了 有没有办法为我的内部邮件预留一些存储空间?或者可以限制某些队列的大小吗 谢谢是的,您可以使用和生产者流控制来限制所有或特定队列消耗的最大内存。在activemq.xml中,您需要添加如下部分: <destinationPolicy>
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" producerFlowControl="true" memoryLimit="50mb" />
</policyEntries>
</policyMap>
</destinationPolicy>
“>”将匹配所有队列。您可以更改模式以仅匹配您希望策略影响的队列
受策略影响的每个队列都将其内存限制设置为50mb。这意味着您需要考虑队列的数量来计算队列消耗的最大内存,以及它是否适合可用的VM堆空间
该策略仅限制要使用的内存量。只能为代理全局设置,而不能基于每个目的地进行设置。我尝试对其他答案进行编辑,但未获得批准
您可以使用限制单个队列使用的存储。调整默认为100%的storeUsageHighWaterMark
属性。从文件中:
系统使用存储限制将导致发送到块的临界点
因此,您的配置类似于:
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" storeUsageHighWaterMark="75" producerFlowControl="true" >
</policyEntry>
<policyEntry queue="INTERNAL.>" storeUsageHighWaterMark="100" producerFlowControl="true">
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
这表示以
INTERNAL.
开头的队列在阻塞之前可以使用100%的存储空间。一旦75%的存储空间被占用,其他队列将被阻塞 这种平和的配置意味着:“所有队列必须共享50mb”或“每个队列的容量不得超过50mb”?还有另一个问题,我使用的是持久队列,“MemoryLit”不是限制内存中的空间(而不是存储空间)?好的,我想这就是我的问题的答案:如果我想为一些队列保留一些存储空间,我必须创建另一个代理…Dush,你不需要。我已经更新了@Ralf的答案,增加了一些细节