我使用 ActiveMQ 作为外部应用程序的消息服务器,但也用于我的内部消息。
如果我的应用程序宕机时间过长,外部应用程序会占用 ActiveMq 服务器。但是当我重新启动它时,它无法使用消息,因为它无法发送“内部”消息(我的路由是事务性的)。所以所有的系统都被阻塞了。
有没有办法为我的内部消息保留一些存储空间?或者是否可以限制某些队列的大小?
谢谢
最佳答案
是的,您可以使用 destination policy和生产者流量控制,以限制所有或特定队列消耗的最大内存。在您的 activemq.xml 中,您需要添加如下部分:
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" producerFlowControl="true" memoryLimit="50mb" />
</policyEntries>
</policyMap>
</destinationPolicy>
destination wildcard “>”将匹配所有队列。您可以更改模式以仅匹配您希望策略影响的那些队列。
每个受策略影响的队列都将其内存限制设置为 50mb。这意味着您需要考虑队列的数量来计算队列消耗的最大内存以及它是否适合可用的 VM 堆空间。
该策略仅限制要使用的内存量。 temp- and file-store limits只能为代理全局设置,不能在每个目的地基础上设置。
关于ActiveMQ - 如何为某些队列保留存储空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23406915/