Контролируйте скорость потребления потребителя RabbitMQ, используя amqplib для Node.JS.

Мое приложение использует очередь RabbitMQ для хранения сообщений, затем у меня есть рабочий процесс, потребляющий эти сообщения и вставляющий их в базу данных. Цель состоит в том, чтобы не нагружать базу данных пиковыми нагрузками. Проблема, с которой я сталкиваюсь, заключается в том, что в эти пиковые моменты скорость публикации очереди очень высока, и рабочий процесс начинает получать больше сообщений в секунду, чем он может обработать, пока не выйдет из строя.

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

Я использую amqplib для Node.JS, и это код, который я использую для работника:

open.then(function(conn) {
  var ok = conn.createChannel();
  ok = ok.then(function(ch) {
    ch.assertQueue(q);
    ch.consume(q, function(msg) {
      if (msg !== null) {
        message = JSON.parse(msg.content.toString());
        processMessage(message);
      }
    }, {noAck: true});
  });
  return ok;
}).then(null, console.warn);

person Manuel Campos    schedule 22.05.2014    source источник


Ответы (1)


Похоже, вы ищете prefetch_count в функции consume.

Для получения дополнительной информации перейдите по ссылке: http://www.rabbitmq.com/consumer-prefetch.html

person Vor    schedule 23.05.2014