The dead letter queue is where you look first

A message that fails repeatedly either blocks the queue behind it or is discarded, and both are worse than setting it aside. A dead letter queue is the third option, and it is only useful if someone looks at it.

# rabbitmq: route rejected messages elsewhere after N attempts
x-dead-letter-exchange: dlx
x-dead-letter-routing-key: orders.failed

# and alert on depth, or it is a folder nobody opens
depth(orders.failed) > 0 for 10m

The alert is the part people skip, and without it the queue is an archive of problems nobody knows about — usually discovered weeks later when a customer asks why something never happened. Keep the original message and the failure reason together, or triage means guessing. Replaying is a first-class operation and should be a command, not an afternoon with a script.