简体   繁体   中英

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

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

the RabbitMQ team monitors the rabbitmq-users mailing list and only sometimes answers questions on StackOverflow. RabbitMQ 团队监控rabbitmq-users邮件列表,并且有时只回答 StackOverflow 上的问题。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM