2

私のアプリは、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);
4

1 に答える 1

2

あなたが機能しているように聞こえprefetch_countますconsume

詳細については、 http ://www.rabbitmq.com/consumer-prefetch.html を参照してください。

于 2014-05-23T15:44:28.817 に答える