Comparisons

Ten pairs that get conflated in real conversations. Neither column wins — what decides is the requirement. Each record leads with the confusion, because the confusion is the reason the record exists.

At-least-once vs "Exactly-once"

What people get wrong about this pair

A provider's "exactly-once" is claimed as a delivery guarantee and read as permission to skip idempotency. Separate the two: delivery is about the transport, processing is about your business effect. A broker can deduplicate within its own window, but the moment your handler writes to a database it did not deduplicate for you.

At-least-once delivery
Use it when

What every real queue and webhook provider gives you: a message may be delivered more than once, and you handle it.

"Exactly-once" processing
Use it when

What you build on top of at-least-once, with idempotent handlers and deduplication — an effect observed once, not a message delivered once.

DimensionAt-least-once delivery"Exactly-once" processing
What the broker promisesThe message will arrive, possibly repeatedlyDeduplication within a scope and window it defines
Where the burden sitsYour handlerStill your handler, for anything outside the broker
Typical duplicate causeAck lost, visibility timeout expired, consumer restartThe same, once outside the dedup window
ImplementationIdempotency key or natural unique constraintThe same, plus the broker's feature
CostStoring processed ids and checking themOften reduced throughput and a constrained topology
Safe assumptionAssume duplicates alwaysNever assume the effect happened only once for free