使用 amqplib for Node.JS 控制 RabbitMQ 消费者的消费率

Posted

技术标签:

【中文标题】使用 amqplib for Node.JS 控制 RabbitMQ 消费者的消费率【英文标题】:Control consumption rate of RabbitMQ consumer using amqplib for Node.JS 【发布时间】:2014-07-12 02:46:08 【问题描述】:

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

【问题讨论】:

【参考方案1】:

听起来你在 consume 函数中寻找 prefetch_count

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

【讨论】:

以上是关于使用 amqplib for Node.JS 控制 RabbitMQ 消费者的消费率的主要内容,如果未能解决你的问题,请参考以下文章

使用php-amqplib连接rabbitMQ 学习笔记及总结

Node.js 中 For 循环中的 async.waterfall

Node.js 中 For 循环中的 async.waterfall

如果没有使用php amqplib显式关闭连接怎么办?

在 Windows 上安装多个版本的 Node.js,而不使用 NVM for Windows

使用events.EventEmitter 控制Node.js 程序执行流程