Skip to content

GH-3708: document NativeAck in the RabbitMQ and partitioning guides - #4054

Merged
jeremydmiller merged 1 commit into
mainfrom
gh-3708/native-ack-docs-only
Aug 23, 2026
Merged

GH-3708: document NativeAck in the RabbitMQ and partitioning guides#4054
jeremydmiller merged 1 commit into
mainfrom
gh-3708/native-ack-docs-only

Conversation

@jeremydmiller

Copy link
Copy Markdown
Member

Docs-only follow-up to #4040.

#4040 documents EndpointMode.NativeAck in listeners.md — the settings-matrix column and the mode's own section. Two other pages discuss exactly the trade-off this mode changes and did not know it existed.

RabbitMQ performance guide. NativeAck joins "Choosing the endpoint mode", positioned as what to reach for when Inline is too slow because it is single-threaded per listener and Durable is too expensive under a flood. The prefetch section gains the mode's sizing rule and, more usefully, the consequence: for a NativeAck endpoint the prefetch window is the back pressure — nothing is acked until a handler succeeds, so the broker stops delivering at the unacked ceiling — and it is simultaneously the bound on how many deliveries a dying node hands back. Raising it trades smoother throughput for more redelivery after a crash or rolling deploy. That is a real dial with two opposed effects and it should be documented as one.

Partitioning guide. A tip on "Partitioned Processing at any Endpoint" spelling out what each mode actually costs for partitioned work, since that page previously implied the choice was free: Durable pays an inbox insert plus a mark-as-handled update per message; BufferedInMemory removes the database cost but acks before the handler runs, so a node dying mid-flight loses what was buffered; ProcessInParallelWithNativeAcks() pays neither; and ProcessInline() cannot do it at all and now throws at startup rather than silently ignoring PartitionProcessingByGroupId() (GH-3712).

It also repeats the ordering guarantee in the place where someone configuring partitioning will actually read it: messages sharing a group id never execute concurrently, but strict processing in original delivery order is not promised under failure or redelivery in any non-durable mode.

Ordering

No file overlap with #4040 — that PR touches listeners.md, this touches partitioning.md and rabbitmq/performance.md. The only dependency is a cross-reference: both new sections link to /guide/messaging/listeners#native-ack-endpoints, which #4040 creates. Merge #4040 first or those two anchors dangle.

🤖 Generated with Claude Code

#4040 documented the mode in listeners.md -- the settings matrix column and the
mode's own section. Two other pages talk about exactly the trade-off this mode
changes and did not know it existed.

* RabbitMQ performance guide: NativeAck joins "Choosing the endpoint mode", and
  the prefetch section explains that for this mode the prefetch window IS the
  back pressure and is also the bound on how many deliveries a dying node hands
  back -- so raising it trades throughput for redelivery.
* Partitioning guide: a tip on "Partitioned Processing at any Endpoint" laying
  out what each mode costs for partitioned work -- Durable pays the database,
  Buffered acks before the handler and loses on crash, NativeAck pays neither,
  and Inline cannot do it at all and now throws rather than ignoring it. Says
  plainly that no non-durable mode promises original delivery order under
  failure.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@jeremydmiller
jeremydmiller merged commit c858ec0 into main Aug 23, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant