我的应用程序使用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);
答案 0 :(得分:2)
听起来您正在寻找prefetch_count
函数中的consume
。
欲了解更多信息,请访问: http://www.rabbitmq.com/consumer-prefetch.html