我是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。我该怎么办?谢谢。
答案 0 :(得分:1)
如果您只有一个队列且只有一个使用者,则可以将预取设置为1。
channel.prefetch(1)
您可以从RabbitMQ的官方文档中获取更多详细信息:
该值定义通道上允许的未确认送达的最大数量。一旦数量达到配置的数量,RabbitMQ将停止在通道上传递更多消息,除非已确认至少一个未处理的消息