RabbitMQ:上一个项目完成后消费项目

时间:2018-10-26 11:00:41

标签: javascript node.js rabbitmq

我是RabbitMQ的新手。我想要的是一次只执行一项,下一项将在上一项完成后消耗掉。

以下是创建消费者的方式:

consumer.assertQueue(queue, { durable: true });
consumer.consume(queue, handleMessage, { noAck: false });

这是功能handleMessage:

async function handleMessage(message) {    
    console.log('handleMessage', message.content.toString());
    // wait for 1 second
    await wait(1000); 
    console.log('ACK', message.content.toString());
    consumer.ack(message);
}

发布者将发送以下内容:

publisher.sendToQueue(queue, Buffer.from('1'));
publisher.sendToQueue(queue, Buffer.from('2'));

这是日志。似乎不等待处理过程等待1秒才能完成:

handleMessage 1
handleMessage 2
ACK 1
ACK 2

我想要的是:

handleMessage 1
ACK 1
handleMessage 2
ACK 2

平均消息1必须先完成,然后才能处理消息2。我该怎么办?谢谢。

1 个答案:

答案 0 :(得分:1)

如果您只有一个队列且只有一个使用者,则可以将预取设置为1。

channel.prefetch(1)

您可以从RabbitMQ的官方文档中获取更多详细信息:

  

该值定义通道上允许的未确认送达的最大数量。一旦数量达到配置的数量,RabbitMQ将停止在通道上传递更多消息,除非已确认至少一个未处理的消息