我有以下代码:
class Queue extends EventEmitter {
async listen(queueName) {
await this._channel.prefetch(10);
this._channel.consume(queueName, (message) => {
if (!message) {
return;
}
this.emit(queueName, new QueueMessage(this._channel, message));
});
}
}
然后,在其他地方,我要处理上面最后一行代码发出的事件,并进行一些异步工作(HTTP请求),然后对它们进行确认。
我的理解是prefetch
主要是一种优化,它可以同时向使用者传递多条消息,从而避免了必须多次往返RabbitMQ服务器的麻烦。另外,如果客户端收到的未确认消息多于预取计数,则RabbitMQ库不会提取更多消息,直到某些消息被确认或不确认为止。
但是,我似乎找不到的那篇文章是关于如何将这些消息传递到消费者代码的。
例如,在我的代码中,假设传递了消息1,将其转换为一个事件,并导致了一个异步HTTP请求,那么在传递消息1之后,将消息2转换为一个事件,并转换为另一个异步HTTP请求在第一个消息被确认还是未确认之前?
如果是这样,设置预取计数= 1是唯一一种确保消息被处理直到ACK或NACK的唯一方法吗?