我是 RabbitMQ 新手。我想要的是一次只执行一项,前一项完成后才会消耗下一项。
以下是 Consumer 的创建方式:
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。
channel.prefetch(1)
您可以从 RabbitMQ 的官方文档获取更多详细信息:
The value defines the max number of unacknowledged deliveries that are permitted on a channel. Once the number reaches the configured count, RabbitMQ will stop delivering more messages on the channel unless at least one of the outstanding ones is acknowledged
关于javascript - RabbitMQ:前一项完成后消费项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53007270/