diff --git a/akka-docs/general/index.rst b/akka-docs/general/index.rst index 687892b177..f3cc0d2a7d 100644 --- a/akka-docs/general/index.rst +++ b/akka-docs/general/index.rst @@ -5,9 +5,9 @@ General :maxdepth: 2 jmm + message-send-semantics configuration event-handler slf4j addressing supervision - guaranteed-delivery diff --git a/akka-docs/general/guaranteed-delivery.rst b/akka-docs/general/message-send-semantics.rst similarity index 54% rename from akka-docs/general/guaranteed-delivery.rst rename to akka-docs/general/message-send-semantics.rst index 550d84376c..d3cb24392a 100644 --- a/akka-docs/general/guaranteed-delivery.rst +++ b/akka-docs/general/message-send-semantics.rst @@ -1,13 +1,14 @@ -.. _guaranteed-delivery: +.. _message-send-semantics: -##################### - Guaranteed Delivery -##################### +####################### + Message send semantics +####################### -Guaranteed Delivery -=================== + +Guaranteed Delivery? +==================== Akka does *not* support guaranteed delivery. @@ -39,4 +40,30 @@ application and can solve it fastest and most reliable by explicit ``ACK`` and ``RETRY`` (if you really need it, most often you don't). Using Akka's Durable Mailboxes could help with this. -.. _Erlang documentation: http://www.erlang.org/faq/academic.html +Delivery semantics +================== + +At-most-once +------------ + +Actual transports may provide stronger semantics, +but at-most-once is the semantics you should expect. +The alternatives would be once-and-only-once, which is extremely costly, +or atleast-once which essentially requires idempotency of message processing, +which is a user-level concern. + +Ordering is preserved on a per-sender basis +------------------------------------------- + +Actor ``A1` sends messages ``M1``, ``M2``, ``M3`` to ``A2`` +Actor ``A3`` sends messages ``M4``, ``M5``, ``M6`` to ``A2`` + +This means that: + 1) If ``M1`` is delivered it must be delivered before ``M2`` and ``M3`` + 2) If ``M2`` is delivered it must be delivered before ``M3`` + 3) If ``M4`` is delivered it must be delivered before ``M5`` and ``M6`` + 4) If ``M5`` is delivered it must be delivered before ``M6`` + 5) ``A2`` can see messages from ``A1`` interleaved with messages from ``A3`` + 6) Since there is no guaranteed delivery, none, some or all of the messages may arrive to ``A2`` + +.. _Erlang documentation: http://www.erlang.org/faq/academic.html \ No newline at end of file