Acknowledgment, Redelivery, and the Reordering Trap (Figure 12-2)

Acknowledgment, Redelivery, and the Reordering Trap (Figure 12-2) A sequence diagram generated by Archify. send m1, m2, m3, m4, m5 in order producer order: m1 → m2 → m3 → m4 → m5 deliver m1 (load balancing) ack m1 Consumer 1 processed so far: m1 deliver m2 (load balancing) ack m2 Consumer 2 processed so far: m2 deliver m3 deliver m4 delivered while Consumer 2 is still busy with m3 crash while processing m3 — no ack connection closes or times out; the broker assumes m3 was never processed ack m4 Consumer 1 processed so far: m4 — concurrent with the m3 crash redeliver m3 (unacknowledged) the retry is assigned to the other consumer, at a later time deliver m5 ack m3, m5 Consumer 1 processed order: m4, m3, m5 — m3 and m4 are out of producer order 1 · Ordered send, load-balanced delivery 2 · Crash with no acknowledgment 3 · Redelivery reorders what Consumer 1 processes Producer 1 · ordered event source · Sequence participant Producer 1 ordered event source Message Broker · load-balanced queue · Sequence participant Message Broker load-balanced queue Consumer 1 · processes and acks · Sequence participant Consumer 1 processes and acks Consumer 2 · crashes on m3 · Sequence participant Consumer 2 crashes on m3 Legend main request return async trace message