How to consume just one message from rabbit mq on nodejs

Follow up the example here :

https://www.npmjs.com/package/amqplib

// Consumer
function consumer(conn) {
  var ok = conn.createChannel(on_open);
  function on_open(err, ch) {
    if (err != null) bail(err);
    ch.assertQueue(q);
    
     // IMPORTANT
    ch.prefetch(1);

    ch.consume(q, function(msg) {
      if (msg !== null) {
        console.log(msg.content.toString());
        ch.ack(msg);
      }
    });
  }
}

Refs: http://www.squaremobius.net/amqp.node/channel_api.html#channel_prefetch


At this moment (2018), I think RabbitMQ team has an option to do that:

https://www.rabbitmq.com/tutorials/tutorial-two-javascript.html

ch.prefetch(1);

In order to defeat that we can use the prefetch method with the value of 1. This tells RabbitMQ not to give more than one message to a worker at a time. Or, in other words, don't dispatch a new message to a worker until it has processed and acknowledged the previous one. Instead, it will dispatch it to the next worker that is not still busy.