NodeJS + RabbitMQ - 如何限制接收者处理的消息数量

时间:2015-01-19 09:54:24

标签: node.js rabbitmq

我正在使用amqplib节点模块并按照hello world发送/接收教程。

https://github.com/squaremo/amqp.node/tree/master/examples/tutorials

我的接收者/工作人员在后台接收该消息并执行CPU密集型任务,因此我一次只能处理大约5条消息。

控制接收方正在接受的消息数量的最佳方法是什么。

代码示例:

var amqp = require('amqplib');

amqp.connect('amqp://localhost').then(function(conn) {
    process.once('SIGINT', function() { conn.close(); });
    return conn.createChannel().then(function(ch) {

        var ok = ch.assertQueue('hello', {durable: false});

        ok = ok.then(function(_qok) {
            return ch.consume('hello', function(msg) {
                 console.log(" [x] Received '%s'", msg.content.toString());
            }, {noAck: true});
        });

            return ok.then(function(_consumeOk) {
            console.log(' [*] Waiting for messages. To exit press CTRL+C');
        });
    });
}).then(null, console.warn);

1 个答案:

答案 0 :(得分:1)

您需要在模型上设置服务质量。以下是在C#中如何做到这一点

var _model = rabbitConnection.CreateModel();
// Configure the Quality of service for the model. Below is how what each setting means.
// BasicQos(0="Dont send me a new message untill I’ve finshed",  _fetchSize = "Send me N messages at a time", false ="Apply to this Model only")
_model.BasicQos(0, _fetchSize, false);

QOS适用于Ack流程。因此,在您收到消息之前,它一次只会向您发送N(_fetchSize)。我认为你必须在代码中设置noAck:false才能使其正常工作。

祝你好运!