Использование RabbitMQ с Node - ограничение параллельной обработки - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть очередь RabbitMQ, которая иногда может содержать значительный объем данных для обработки.

Насколько я понимаю, использование channel.consume попытается принудительно отправить сообщения в узел программа, даже если она достигает предела оперативной памяти (и, в конечном итоге, cra sh).

Каков наилучший способ обеспечить выполнение работниками столько задач, сколько они способны обработать?

Я думаю об использовании цепочки (преобразования) потоков вместе с channel.get (который получает только одно сообщение). Если буфер первого потока заполнен, мы просто прекращаем получать сообщения.

1 Ответ

0 голосов
/ 30 апреля 2020

Полагаю, вы хотите указать потребительскую предварительную выборку . Это указывает RabbitMQ, сколько сообщений он должен "pu sh" для потребителя за один раз.

Пример приведен здесь

channel.prefetch(1);

Будет наименьшим значением для предоставления и должно обеспечивать наименьшее потребление памяти для вашей программы узла.

Это основано на вашем описании, если мое понимание верно, я бы также рекомендовал переименовать ваш вопрос. (параллельная обработка будет относиться больше к нескольким потребителям в одной очереди, а не к одному получателю, получающему все сообщения)

...