Guides on RabbitMQ dead-letter queues, replaying messages and alerting on queues, written by the people building Warren. Everything here works without Warren; where it fits, we say so at the end.
What Spring AMQP does when a @RabbitListener throws, how to send failures to a dead-letter queue instead of an endless redelivery loop, retries with backoff, RepublishMessageRecoverer versus x-death, and how to put the messages back without losing any.
Where MassTransit puts a message when a consumer throws or nobody consumes its type, what the MT-Fault headers tell you, how retry and delayed redelivery interact with the error queue, and how to send the messages back to the endpoint without losing any.
The tools people reach for when messages have to leave a dead-letter queue, compared on the questions that matter at 3 a.m.: which messages, where to, what happens to x-death, is it loss-free, and who can tell afterwards what happened.
A side-by-side look at the RabbitMQ management UI and Warren for dead-letter work: browsing messages, moving them, replaying to the original route, editing, history, alerting and audit. Where the management UI is enough, and where it is not.
Four ways to move messages out of a RabbitMQ dead-letter queue and back to their consumers: the management UI, a shovel, your own script, and what to watch out for with x-death, retry counters and publisher confirms.
What every field in RabbitMQ's x-death header means, how the array grows when a message cycles through retry queues, what x-first-death and x-last-death add, and how to read it from the management UI, the CLI or code.
How to detect a RabbitMQ queue whose consumers are gone before its messages expire or pile up: the management API fields to watch, Prometheus alert rules with rabbitmq_prometheus, a cron-and-curl fallback, and which queues to exclude.