'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



Solution 1:[1]

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

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

NOTE: the RabbitMQ team monitors the rabbitmq-users mailing list and only sometimes answers questions on StackOverflow.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Luke Bakken