ActiveMQ - 如何为某些队列保留存储空间?

标签 activemq

我使用 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/

相关文章:

java - JMS异常: Queue does not exist

jvm - 端口绑定(bind)异常启动activemq

java - 配置应用程序登录 ActiveMQ,但 log4j2 失败

tomcat - struts 中的 JMS 队列连接工厂

java - 无法使用activemq获取异步消息

grails - 如何使用Grails和JMS/ActiveMQ配置专有使用者?

java - 如何从 JBoss 写入远程 JMS 队列

spring - 如何使用 Spring JMS 在 ActiveMQ 中创建多个监听器

java - ActiveMQ 故障转移传输 - 为什么有这么多连接?

java - 如何在 Node JS 中为 ActiveMQ 编写发送方应用程序