Если я увеличу общее количество запросов одновременно, то по мере увеличения числа очередь обмена будет зависать на любом из компонентов.
ActiveMQ имеет механизм, который останавливает написание сообщений производителем, он называется «управление потоком», кажется, что ваш производитель работает быстрее, чем потребитель (или потребитель не стабилен по своей скорости), поэтому сначала проверьте конфигурацию memoryLimit для вашего AMQ ( также определение его или возможной специальной очереди). Попробуйте увеличить его.
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic="FOO.>" producerFlowControl="false" memoryLimit="1mb">
<dispatchPolicy>
<strictOrderDispatchPolicy/>
</dispatchPolicy>
<subscriptionRecoveryPolicy>
<lastImageSubscriptionRecoveryPolicy/>
</subscriptionRecoveryPolicy>
</policyEntry>
</policyEntries>
</policyMap>
Кроме того, вы можете отключить эту остановку обработки входящих сообщений с помощью опции producerFlowControl="false"
. Таким образом, в случае использования всего буфера AMQ замедлится, и все сообщения будут сохранены на HD. Подробнее Управление потоком данных и Курсоры сообщений
Размер кучи контейнера достигает очень большого значения, и через некоторое время происходит сбой и автоматический перезапуск.
Но в любом случае, это просто способ настройки вашего приложения, это не решение, потому что всегда будет случай, когда некоторые ресурсы закончатся:)
Вы должны ограничить входящие запросы или уравновесить их, например. используя фунт