私のアプリは、RabbitMQ キューを使用してメッセージを保存し、ワーカーがそれらのメッセージを消費してデータベースに挿入します。意図は、ワークロードのピーク時にデータベースに負荷をかけないことです。私が抱えている問題は、それらのピーク時にキューの発行率が非常に高くなり、ワーカーがクラッシュするまで処理できるよりも多くのメッセージを毎秒受信し始めることです。
消費率を制御して、ワーカーがメッセージを消費するよりも速くメッセージを受信しないようにする方法はありますか? メッセージは重要ではないので、ワーカが処理できるようになるまでメッセージがキューに入れられたままになる時間は気にしません。
私は Node.JS に amqplib を使用しています。これはワーカーに使用しているコードです。
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);