2

我的应用程序使用 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);
4

1 回答 1

2

听起来你正在寻找prefetch_count功能consume

欲了解更多信息,请访问: http ://www.rabbitmq.com/consumer-prefetch.html

于 2014-05-23T15:44:28.817 回答