Мое приложение использует очередь 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);