Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RabbitMQ Consume Messages in Batches and Ack them all at once

I have a RabbitMQ queue in which I post thousands of messages. I need a background Service that will:

  • Retrieve the messages in batches of 100 messages
  • Store those 100 messages in a Database
  • Ack all 100 messages at once
  • Proceed with the next batch of 100 messages

I'm using the RabbitMQ Client to listen for messages, but I don't know how to "batch" them.

Does anyone has a working example on how to get my messagess 100-100 at a time and ACK them all at once after they have been saved in a DB?

Thanx a lot in advance

like image 729
Katia S. Avatar asked Dec 31 '25 13:12

Katia S.


1 Answers

You want to use the "prefetch" and "multi ack" features -

  • Prefetch - https://www.rabbitmq.com/consumer-prefetch.html
  • Multi-ack - https://www.rabbitmq.com/confirms.html#consumer-acks-multiple-parameter

This is what you'll do in your code:

  • Open a connection and channel
  • Set the channel prefetch to 100
  • Start a consumer. The callback you register for your consumer will start being called with messages. You will have to save these messages in a list or other data structure
  • Once you have received 100 messages, save the delivery tag of the 100th message and do your database work.
  • Ack the 100 messages by setting "multi ack" to true and use the delivery tag of the 100th message.
  • RabbitMQ will send the next 100 messages in the same manner
like image 99
Luke Bakken Avatar answered Jan 03 '26 01:01

Luke Bakken



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!