Junior — Middle
Explique o conceito de Prefetch e como ele é aplicado no RabbitMQ para gerir a entrega de mensagens
sobes.tech IA
Resposta da IA
Prefetch no RabbitMQ é um mecanismo que limita a quantidade de mensagens que um consumidor pode receber do broker ao mesmo tempo antes de confirmar o seu processamento.
Isto ajuda a controlar a carga no consumidor e evita situações em que ele recebe muitas mensagens e não consegue processá-las a tempo, o que pode levar a sobrecarga de memória ou atrasos.
Por exemplo, se definir o count de prefetch para 1, o consumidor receberá apenas uma mensagem de cada vez e não receberá uma nova até confirmar o processamento da atual:
var channel = connection.CreateModel();
channel.BasicQos(0, 1, false); // count de prefetch = 1
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) => {
// processamento da mensagem
channel.BasicAck(ea.DeliveryTag, false);
};
channel.BasicConsume(queue: "task_queue", autoAck: false, consumer: consumer);
Assim, o prefetch ajuda a equilibrar a carga e a aumentar a fiabilidade do processamento de mensagens.