【问题标题】:What is the equivalent for the ActiveMQ 5.x sendFailIfNoSpace setting in Artemis?Artemis 中 ActiveMQ 5.x sendFailIfNoSpace 设置的等效项是什么?
【发布时间】:2020-03-11 21:34:04
【问题描述】:

我正在使用 Spring Boot 应用程序,该应用程序使用 Spring 的 JmsTemplate 将消息发送到 ActiveMQ Artemis 队列。如果磁盘空间已满且队列阻塞,则任何对convertAndSendJmsTemplate 调用将永远挂起。对我来说最好是它给出一个错误。

ActiveMQ 对此有一个配置,即sendFailIfNoSpace:

<systemUsage>
    <systemUsage sendFailIfNoSpace="true">
        <memoryUsage>
            <memoryUsage limit="20 mb"/>
        </memoryUsage>
    </systemUsage>
</systemUsage>

有没有办法配置 Artemis 队列来执行此操作?

应用程序中的一些细节是:

一个 Spring 自动配置的 JmsTemplate 调用:

jmsTemplate.convertAndSend("just another message");

Artemis 代理对所涉及的任何队列都有默认设置:

<address-setting match="#">
   <dead-letter-address>DLQ</dead-letter-address>
   <expiry-address>ExpiryQueue</expiry-address>
   <redelivery-delay>0</redelivery-delay>
   <!-- with -1 only the global-max-size is in use for limiting -->
   <max-size-bytes>-1</max-size-bytes>
   <message-counter-history-day-limit>10</message-counter-history-day-limit>
   <address-full-policy>PAGE</address-full-policy>
   <auto-create-queues>true</auto-create-queues>
   <auto-create-addresses>true</auto-create-addresses>
   <auto-create-jms-queues>true</auto-create-jms-queues>
   <auto-create-jms-topics>true</auto-create-jms-topics>
</address-setting>

【问题讨论】:

    标签: spring-jms activemq-artemis


    【解决方案1】:

    ActiveMQ Artemis 中目前没有与sendFailIfNoSpace 等效的功能。如the documentation 中所述,当超过max-disk-usage 时,代理将阻塞:

    系统将对磁盘执行扫描以确定磁盘是否超出配置的限制。这些是通过max-disk-usage 配置的百分比。一旦达到该限制,任何消息都将被阻止。 (除非协议不支持流控制,在这种情况下会抛出异常并且这些客户端的连接会断开)。

    需要明确的是,客户端调用不会被阻止永远。它们将被阻止,直到磁盘上的足够空间被释放。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多