javascript - RabbitMQ:前一项完成后消费项目

标签 javascript node.js rabbitmq

我是 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/

相关文章:

javascript - 无法使用 Firefox 下载 blob 文件,但可以在 Chrome 中使用?

javascript - 有条件地显示元素 : should I createElement or hide the elements?

node.js - react 和 Socket.io : Able to get initial data - but view doesn't update when a new post comes in

java - Spring Websocket、RabbitMQ 和 STOMP 的性能问题

sbt - Apache Flink RabbitMq SBT 依赖失败

javascript - 如何使用 Mongoose 获得分组数据的总和

javascript - 如何使用 iPhone SDK 评估 javascript 代码?

node.js - 找不到 casperjs 命令

node.js - Gatsby 的环境变量 "env.cmd not found"

尝试使用 RabbitMQ 和 Spring 发送消息时出现 java.util.NoSuchElementException