Каков эквивалент для параметра ActiveFQ 5.x sendFailIfNoSpace в Artemis? - PullRequest
0 голосов
/ 12 марта 2020

Я работаю с приложением Spring Boot, которое использует JmsTemplate Spring для отправки сообщений в очередь ActiveMQ Artemis. Если дисковое пространство заполнено и очередь блокируется, то любые JmsTemplate вызовы convertAndSend будут зависать вечно. Для меня было бы лучше вместо этого выдать ошибку.

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>

1 Ответ

1 голос
/ 12 марта 2020

Там в настоящее время нет эквивалента sendFailIfNoSpace в ActiveMQ Artemis. Как указано в документации , при превышении max-disk-usage брокер будет блокировать:

Система выполнит сканирование на диске, чтобы определить, находится ли диск за пределами сконфигурированного предел. Они настраиваются через max-disk-usage в процентах. Как только этот предел будет достигнут, любое сообщение будет заблокировано. (если протокол не поддерживает управление потоком, в этом случае будет выдано исключение и соединение для этих клиентов будет прервано).

Для ясности, клиентские вызовы не будут блокироваться навсегда . Они будут просто заблокированы, пока на диске не освободится достаточно места.

...