Как IBM MQ QM распределяет сообщения по нескольким потребителям - PullRequest
0 голосов
/ 07 июня 2018

У нас есть установочная установка IBM MQ v8 с 1 большой непостоянной очередью и множеством потребителей (50+) в этой очереди.Большое количество потребителей необходимо для обработки объема сообщений, публикуемых в очереди.

Теперь мы заметили, что администратор очередей не распределяет сообщения равномерно по потребителям X.Несколько потребителей получают до 300 сообщений в минуту, тогда как многие другие получают только несколько сообщений в минуту (<10).И в очереди много сообщений, и глубина очереди постоянно увеличивается.Процессор и память на стороне потребителя не являются проблемой, использование обоих составляет <50%.</p>

Может кто-нибудь объяснить, как администратор очередей IBM MQ распределяет сообщения по нескольким потребителям?И можно ли повлиять на это как на сервере, так и на стороне потребителя, чтобы сообщения распределялись более равномерно по доступным потребителям?

Добавлено после ответа Марка Тейлорса

Проблема, с которой мы сталкиваемся, состоит в том, что в очередь добавляется> 10.000 сообщений в минуту, и мы не можем использовать их достаточно быстро.Наша текущая настройка заключается в том, что у нас есть простой потребитель, который работает в контейнере Docker, и мы масштабируемся, запустив несколько контейнеров.Запуск 12 потребителей (контейнеров Docker) действительно увеличивает общую пропускную способность, запуск более 50 потребителей не увеличивает пропускную способность.Каждый потребитель прост:

1. connect to queue manager
2. Connect to queue
3. While true
   - Get message from queue
   - Process message (commenting this out does not increase overall performance)

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

С уважением,

Gero

1 Ответ

0 голосов
/ 07 июня 2018

Поведение MQ по умолчанию - отправлять сообщения получателю MOST RECENT.Как правило, это повышает производительность, поскольку этот процесс, скорее всего, будет «горячим» (в кеше процессора).Так что не стоит ожидать равного распределения сообщений.Если вы видите, что одно приложение получает большинство сообщений, это означает, что оно регулярно проходит обработку одного сообщения, прежде чем другое станет доступным для извлечения.Он присоединяется к очереди официантов до того, как станет доступным следующее сообщение.

Существует множество аспектов, влияющих на общую производительность, включая транзакционность, критерии поиска, конкуренцию и т. Д., Поэтому на самом деле невозможно сказать, в чем заключается ваша проблема илиизменение этого алгоритма распределения по умолчанию (существует недокументированный параметр настройки, который обращает очередь официантов) может помочь.А наличие клиентских подключений, где ожидание действительно выполняется "прокси" процессами и потоками svrconn, усложняет процесс.

...