Activemq не балансирует сообщения через некоторое время - PullRequest
0 голосов
/ 11 сентября 2018

Я использую activemq(5.14.5) с camel(2.13.4), потому что мне все еще нужно java 6.У меня есть очередь и 15 потребителей.Отправленные им сообщения являются ответом на запрос.

Когда я запускаю потребителей, сообщения распределяются по одному на каждого потребителя, как только сообщения приходят, но через некоторое время сообщения получает только один потребитель, остальные остаютсяпростаивает, и многие сообщения остаются в ожидании.

Потребители имеют такую ​​конфигурацию:

concurrentConsumers=15&maxMessagesPerTask=1&destination.consumer.prefetchSize=0&transferException=true

Время, затрачиваемое на обработку каждого сообщения, может сильно различаться из-за нашего бизнес-правила, поэтому я не«Не знаю, есть ли у activemq какое-то правило, которое управляет медленными потребителями и перенаправляет только на одно, которое более« эффективно ».

Я ожидал, что все поступающие сообщения начнут обрабатываться довсе потребители полны, но это не то, что происходит.

Кто-нибудь знает, что происходит?

Ниже приведено изображение о том, что происходит: Queues

1 Ответ

0 голосов
/ 12 сентября 2018

Ваша конфигурация имеет две привлекательные настройки:

  1. maxMessagesPerTask=1

Если вы не собирались настраивать автоматическое масштабирование пула потоков, вам следует полностью удалить этот параметр . Значение is по умолчанию не ограничено и задает, как долго хранить потоки для обработки (масштабирование вверх / вниз пула потоков).

См. Также Spring Docs об этой настройке

  1. prefetchSize=0

Вы пытались установить это значение на 1 , чтобы каждый потребитель получал только 1 сообщение за раз?

Документы AMQ говорят о prefetchSize:

Большие значения предварительной выборки рекомендуются для высокой производительности при больших объемах сообщений. Однако для меньших объемов сообщений, когда каждое сообщение занимает много времени, предварительная выборка должна быть установлена ​​на 1 . Это гарантирует, что потребитель обрабатывает только одно сообщение за раз. Однако указание предела предварительной выборки , равного нулю, приведет к тому, что потребитель будет запрашивать сообщения, по одному за раз, вместо того, чтобы сообщение было отправлено потребителю .

.
...