Как ограничить количество потребляемых сообщений в rabbitmq? - PullRequest
1 голос
/ 17 марта 2019

Я работаю с rabbitmq с amqplib в моем node проекте.

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

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

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

1 Ответ

1 голос
/ 18 марта 2019

Из вашего вопроса не совсем ясно, но, похоже, вы хотите ограничить то, как ваша служба потребляет сообщения, а не сколько сообщений хранится в очереди. Если это понимание верно, тогда вам нужно prefetch_count. Дополнительная документация: https://www.rabbitmq.com/consumer-prefetch.html

var amqp = require('amqplib/callback_api');

amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
    var q = 'task_queue';

    ch.assertQueue(q, {durable: true});
    ch.prefetch(1);                // THIS SHOULD SOLVE YOUR PROBLEM
    console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q);
    ch.consume(q, function(msg) {
      var secs = msg.content.toString().split('.').length - 1;

      console.log(" [x] Received %s", msg.content.toString());
      setTimeout(function() {
        console.log(" [x] Done");
        ch.ack(msg);
      }, secs * 1000);
    });
  });
});

Источник кода: https://www.rabbitmq.com/tutorials/tutorial-two-javascript.html

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