Junior — Middle
How to implement batch processing of messages in RabbitMQ?
sobes.tech AI
Answer from AI
In RabbitMQ, there are several approaches for batch message processing:
-
Prefetch count — set the
prefetchCountparameter inBasicQosto receive multiple messages at once and process them together. -
Buffering messages in code — accumulate messages in a list upon receipt and process them in batches, for example, every N messages or after a timeout.
Example in C# using RabbitMQ.Client:
var factory = new ConnectionFactory() { HostName = "localhost" };
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
channel.BasicQos(0, 10, false); // receive 10 messages at a time
var consumer = new EventingBasicConsumer(channel);
var batch = new List<BasicDeliverEventArgs>();
consumer.Received += (model, ea) => {
batch.Add(ea);
if (batch.Count >= 10) {
// Process batch of messages
foreach (var msg in batch) {
var body = msg.Body.ToArray();
// processing
channel.BasicAck(msg.DeliveryTag, false);
}
batch.Clear();
}
};
channel.BasicConsume(queue: "myQueue", autoAck: false, consumer: consumer);
// You can add a timer to process incomplete batch after some time
This approach improves performance through batch processing and reduces overhead on message acknowledgments.