Recuro.

At-Most-Once Delivery

Quick Summary — TL;DR

  • At-most-once delivery means every message is delivered zero or one times — never duplicated, but may be silently lost.
  • The sender fires the message and moves on. No retries, no acknowledgment tracking.
  • Acceptable for metrics, analytics, logging, and real-time updates where stale data is overwritten anyway. Never acceptable for payments or data integrity workflows.

At-most-once delivery means a message is delivered zero or one times. The sender makes a single attempt and does not retry if delivery fails. No duplicates ever occur, but messages can be silently lost.

How it works

The mechanism is fire-and-forget. The sender transmits the message and immediately considers its job done, regardless of whether the receiver actually got it. There's no acknowledgment, no retry logic, and no tracking of delivery status.

  1. Sender sends message to receiver
  2. If it arrives, the receiver processes it
  3. If it doesn't arrive (network issue, receiver down, timeout), the message is gone

This is the simplest delivery model. No retry infrastructure, no deduplication logic, no state to manage. The simplicity is the appeal.

When at-most-once is acceptable

At-most-once works when the cost of losing a message is low and the cost of duplicating one is high, or when the data is ephemeral and will be replaced by the next update anyway.

When at-most-once is NOT acceptable

Any workflow where a lost message causes real damage should use at-least-once delivery instead:

The trade-off

Property At-most-once At-least-once
Max deliveries1Unlimited (retries)
Duplicates possibleNoYes
Data loss possibleYesNo
ComplexityMinimalRequires retry logic + idempotency
LatencyLowest (no waiting for acks)Higher (ack + possible retries)

The choice boils down to: is it worse to lose a message or to process one twice? For most business-critical systems, losing data is worse, which is why at-least-once delivery is the industry default.

UDP: the classic example

UDP is the networking protocol equivalent of at-most-once delivery. Packets are sent without acknowledgment or retransmission. If a packet is lost, it's gone. This makes UDP ideal for real-time applications (video streaming, online gaming, DNS lookups) where low latency matters more than guaranteed delivery. TCP, by contrast, provides at-least-once semantics at the transport layer with its ack-and-retry mechanism.

FAQ

What is at-most-once delivery?

At-most-once delivery is a messaging guarantee where the sender attempts delivery once and does not retry. The message arrives zero or one times. It's the simplest delivery model: no duplicates, but messages can be lost.

When is at-most-once delivery acceptable?

It's acceptable when the data is ephemeral or replaceable — metrics, analytics, real-time status updates, log streams, and sensor readings. In these cases, a missed message is overwritten by the next one, and the cost of loss is trivial compared to the cost of building retry and deduplication infrastructure.

What is the difference between at-most-once and at-least-once?

At-most-once sends the message once with no retries — simple but lossy. At-least-once retries until the receiver acknowledges — reliable but may produce duplicates. The choice depends on whether losing a message or duplicating one is more damaging for your use case.

At-most-once delivery trades reliability for simplicity. For webhook systems and background jobs where data integrity matters, at-least-once delivery combined with a solid retry policy is the standard approach. When you need the guarantees of at-least-once without the duplicate handling overhead, aim for exactly-once processing by making your consumers idempotent.

Stop managing infrastructure. Start scheduling jobs.

Recuro handles cron scheduling, retries, alerts, and execution logs -- so you can focus on building your product.

No credit card required