Node.js Nodejs和amqplib:Can';t预取多条消息

Node.js Nodejs和amqplib:Can';t预取多条消息,node.js,rabbitmq,Node.js,Rabbitmq,因此,我试图学习如何在node.js中创建rabbitmq使用者。我一直在关注rabbitmq网站上的教程 我正在处理队列,我希望一次获取多条消息。我尝试将5传递给ch.prefetch,但每次调用它仍然只获取一条消息 我使用的代码是: var amqp = require('amqplib'); amqp.connect('amqp://localhost').then(function(conn) { process.once('SIGINT', function() { conn.c

因此,我试图学习如何在node.js中创建rabbitmq使用者。我一直在关注rabbitmq网站上的教程

我正在处理队列,我希望一次获取多条消息。我尝试将5传递给
ch.prefetch
,但每次调用它仍然只获取一条消息

我使用的代码是:

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('task_queue', {durable: true});
    ok = ok.then(function() { ch.prefetch(5); });
    ok = ok.then(function() {
      ch.consume('task_queue', doWork, {noAck: false});
      console.log(" [*] Waiting for messages. To exit press CTRL+C");
    });
    return ok;

    function doWork(msg) {
      var body = msg.content.toString();
      console.log(" [x] Received '%s'", body);
      var secs = body.split('.').length - 1;
      //console.log(" [x] Task takes %d seconds", secs);
      setTimeout(function() {
        console.log(" [x] Done");
        ch.ack(msg);
      }, secs * 1000);
    }
  });
}).then(null, console.warn);
从这个例子

我错过什么了吗?为什么它不一次检索多条消息


谢谢

您怎么知道它不是预取邮件?区分预取和处理消息很重要。预取意味着Rabbit将向每个消费者的客户端预取缓冲区发送
n
消息,但仍将一次处理一条消息。如果您的消费者速度很快,所以在处理过程中不会等待消息的传递,那么预抓取非常有用。这解释了很多。我认为当预取多个时,我会在
doWork
中收到一个数组作为参数。谢谢你帮我解决这个问题。