Pattern · seen in 3 breakdowns across 3 companies
Queue with Guaranteed Delivery
A queue with guaranteed delivery saves every message until it has been processed and confirmed, so it survives backlogs and crashes without dropping anything - unlike a buffer, which loses messages under pressure.
The mechanism
The pattern at its core: a producer sending faster than the consumer can keep up, and the difference between a buffer that drops the overflow and a queue that holds all of it.
Send a producer surge through a buffer, then a durable queue - one drops messages, the other just backlogs.
Definition
A queue with guaranteed delivery keeps each message safely stored until it has been picked up, processed, and confirmed done. It can hold a large backlog, keep working when the consumers crash, and never drop a message even under heavy, sustained load. It makes two promises:
- to producers (the code putting messages in) - once the queue says it has your message, that message will be delivered, no matter what happens next
- to consumers (the workers reading messages out) - the message stays available, and may be handed to you more than once, until you have processed it and confirmed it done
The pattern is best understood by what it is not: a buffer. A buffer keeps messages in memory (or barely saves them) and acts like a queue on a normal day, but starts silently losing messages once the pressure is sustained. A fast in-memory store used as a queue is the classic example: it works fine as a buffer, but because it runs out of memory and throws old entries away, messages vanish once the backlog grows large enough. Buffers are useful for plenty of things, but they are not real queues, because they do not guarantee delivery.
The principle is simple but easy to break: if your queue's response to pressure is to lose data, it is not a queue, it is a buffer. Real queues save every message, however they are built:
- a disk-backed log copied across several machines
- a managed cloud queue you don't run yourself
- a carefully-run message broker with durable storage
Whichever form you pick, it has to store messages solidly enough to survive consumer crashes, sudden bursts from producers, and part of the cluster going down.
The practical takeaway: any pipeline where a lost message is a problem the customer would notice needs a guaranteed-delivery queue between the producers and consumers. A few examples:
- search indexing - a lost message means data no one can find
- notifications - a lost message means an alert that never arrives
- event-sourced systems - a lost message means the state quietly drifts out of sync
More broadly, any pipeline that does work the system can't recreate from its upstream sources needs one too.
When it applies
Tradeoffs
The same move, 3 ways
Every row is a production system that bet on this pattern — the note says how, in that system's own terms.
Problems this pattern answers
The walls where its breakdowns live — each opens the cross-company comparison.