Routing failed messages somewhere they cannot block the main queue is correct design, and it converts a loud failure into a silent one unless something watches the depth.
$ rabbitmqctl list_queues name messages consumers
orders.placed 0 4
orders.placed.dead 7 0 ← nobody is reading this
# the alert that has to exist alongside it:
# depth > 0 for 5m → ticket
#
# and the replay path, built at the same time, or the first
# response to the alert is "what do I do with these"
Zero consumers is deliberate — it is an inbox rather than a stage — which is precisely why the threshold is one rather than a large number. Without the alert, lost orders accumulate for weeks and the discovery is a customer complaint. The replay mechanism has to exist from the start, because the first thing anyone wants after reading the alert is to put the messages back, and building it during an incident is the worst time.