Delivery Semantics

  • Types of delivery are: at-least-once, exactly-once, and at-most-once.
  • At-most-once is trivial: the sender can fire and forget.
  • At-least-once is trivial: the sender retries indefinitely until a response is recieved.
    • Not really, because of lingering network partitions.
  • Exactly-once delivery is non-trivial:
    • If an ack is dropped, how does the sender know whether or not to resend?
    • If a message never makes it to the receiver, how does the sender whether or not to resend?
    • If an ack is delayed, does the sender resend?
  • The only way to achieve exactly-once semantics in practice is to use at-least-once semantics in conjunction with idempotence.
Edit