Использование RabbitMQ с узлом — ограничение параллельной обработки

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

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

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

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


person John Smith    schedule 29.04.2020    source источник


Ответы (1)


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

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

channel.prefetch(1);

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

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

person Olivier    schedule 29.04.2020