AMQP acknowledgement and prefetching
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
Understanding AMQP: Acknowledgement and Prefetching
AMQP (Advanced Message Queuing Protocol) is a widely adopted protocol used in message-oriented middleware. Its main components are message orientation, queuing, routing (including point-to-point and publish-and-subscribe), reliability, and security. Two crucial aspects of AMQP which ensure robust and efficient message delivery are message acknowledgement and message prefetching.
Message Acknowledgement
Message acknowledgement in AMQP is a method by which the receiver signals to the broker that it has successfully received and processed a message. This mechanism prevents message loss, ensuring reliable message delivery even across network failures and consumer crashes.
Types of Acknowledgement
- Auto-Acknowledge: The message is automatically marked as acknowledged by the broker once it sends the message to the consumer. Although this mode reduces the overhead, there is a risk of message loss if the consumer fails before it can process the message.
- Explicit Acknowledge: The consumer must explicitly acknowledge messages after processing. This mode reduces the risk of message loss as the broker maintains the message until the acknowledgement is received.
Implementing Acknowledgement
A typical scenario is using a message listener which processes messages and acknowledges them explicitly.
In this example, whenever a message is consumed, it's processed and acknowledged in the on_message callback function.
Message Prefetching
Message prefetching controls the number of messages sent over the network to a consumer before acknowledgements are received. It is useful in optimizing the flow of messages to match the consumer's ability to process messages.
Prefetch Count Configuration
- Per Consumer Limit: The count represents the maximum number of unacknowledged messages that the server will deliver to a consumer.
- Per Channel Limit: If set, this limit controls the number of unacknowledged messages across all consumers on a channel.
Impact of Prefetching
By setting a prefetch count, you can control the pressure on consumer applications, avoiding overwhelming them with too many messages at once. A well-chosen prefetch count can lead to a smooth, efficient message processing operation.
This setting ensures that the broker sends only one message at a time to the consumer. The next message will only be sent after the previous one has been acknowledged.
Table: Summary of Acknowledgement and Prefetch Settings in AMQP
| Feature | Description | Impact |
| Auto-Acknowledge | Messages are automatically acknowledged by the broker when sent. | Reduced overhead but increased risk of message loss. |
| Explicit Acknowledge | Consumers explicitly send acks after processing. | Safer message delivery; prevents message loss. |
| Prefetch Count (Per Consumer) | Limits the number of unacknowledged messages per consumer. | Prevents consumer overload, enhancing processing efficiency. |
| Prefetch Count (Per Channel) | Limits the unacknowledged messages across all consumers in a channel. | Balances load and prevents consumer saturation on high-load channels. |
Conclusion
Understanding and correctly utilizing message acknowledgement and prefetching in AMQP is essential for designing robust and efficient message-driven applications. These mechanisms help in managing message flow, ensuring reliability, and optimizing the consumption of resources across messaging systems. By leveraging these features appropriately, developers can achieve high throughput while maintaining data integrity across distributed systems environments.
Related reading
- AMQP vs Websphere MQ
- apache- kafka with 100 millions of topics
- Apache-Kafka, batch.size vs buffer.memory
- Apache Beam How to read from multiple Kafka topics with different messages schemes
- Apache Beam over Apache Kafka Stream processing
- Apache Beam Python SDK ReadFromKafka does not receive data
- Apache Camel Kafka - aggregate kafka messages and publish to a different topic at regular intervals
- Apache Camel vs Apache Kafka

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.