Skip to Content
Queues managementDead-letter queues

How to manage dead letter queues with RabbitGUI?

Dead-letter queues collect messages that your broker could not deliver or retain on the original queue: rejections, expirations, length limits, and similar cases. RabbitGUI helps you inspect those messages and re-publish them when you are ready. RabbitMQ does not support treating the queue like a database natively, but RabbitGUI abstracts that away for you.

Two ways to load messages into RabbitGUI

Open the queue in RabbitGUI, go to the Consume tab, pick a mode, and use Extract messages. Both modes copy message data into a local database so you can inspect it without being limited to the broker’s consume-only API.

Screenshot of rabbitgui consume queue cta

Peek and requeue

Messages are prefetched, stored locally, then nacked and requeued so they return to RabbitMQ.

AspectDetail
Effect on the broker queueMessages are not removed, they go back after inspection.
VolumeOnly the first 1,000 messages at the head of the queue are available in this mode. Even if you consume again, you will be consuming the same messages.
OrderingAfter requeue, order is not guaranteed, especially with multiple consumers on the same queue. But most of the time, order is not changed.
HeadersThe broker may add or update headers on nack/requeue (for example x-death, x-delivery-count, x-first-death-exchange). If your app or routing depends on exact header shape, weigh this carefully.

Use peek and requeue when you must leave messages on the broker and only need a window into the front of the queue.

Consume and remove

Messages are consumed from RabbitMQ and stored locally. They no longer exist on the broker queue.

AspectDetail
Effect on the broker queueQueue depth drops; messages exist only in RabbitGUI until you re-publish or discard them.
VolumeNo fixed cap,you can drain the whole queue.
RecoveryTo put traffic back, use Re-publish messages (see below).

This is the more robust option for large backlogs or when you are deliberately draining a DLQ for triage.

You can mix both modes over time, RabbitGUI checks for duplicate messages so you can safely peek the same messages multiple times. RabbitGUI records whether each stored copy was taken with requeue or removal.

The message explorer

After extraction, use the explorer to review what you pulled. You can search, filter, explore pages and more.

Messages explorer rabbitgui

Messages that exist only in the local database (because they were consumed and removed) are marked accordingly by the Local badge on the right of the top bar.

Local badge rabbitgui

You can copy the entire body of a mesage or just the value of a single key by click the copy button on the message. Very handy for quickly copying values.

Rabbitgui copy message value

Message headers

Open a message’s Headers tab to see all headers in a readable layout. RabbitMQ adds structured information for dead-lettered messages (often including x-death entries describing reason, queue, and time).

Rabbitmq message headers

Where RabbitGUI shows a queue or exchange name as a link, you can navigate straight to that object’s detail view to verify bindings, arguments, or policies.

Filtering and statistics

You can filter on message properties. For example routing key, queue name, or death-related metadata. So you can find a specific failure pattern or skim counts by key.

Rabbitgui filter messages

Use this both for one-off debugging and for quick distribution checks (how many dead letters per routing key, and so on).

Deleting messages

Select the messages you want to delete using the checkbox in the top left corner of each message, or click Select all if you want to delete everything. Then go to Actions and choose Delete.

Rabbitgui delete messages

Deleting a message that only leave locally on your machine will delete the message forever since it is no longer in the queue.

You can also delete random messages that still live in the queue (not necessarily in the front of the queue). To achieve that, RabbitGUI does the same thing that peeking does, it prefetches all messages in the front of the queue, but then it acknowledges the messages you want to delete so that RabbitMQ drops them from the queue, and finally nacks and requeues all other messages.

This is extremely useful since it is not native to RabbitMQ, but note that the same limitation as peeking apply.

Re-publishing messages

Republishing messages removes them from your local database and from the queue (see deleting messages) and publishes them back to RabbitMQ based on your selection.

Select one or more messages (or Select all), open Actions, and choose Re-publish.

Republish rabbitgui screenshot

In the modal you can set:

  • Destination exchange: where the messages should be published.
  • Routing key: optionally different from the original, if you need to re-route into another binding or topology.

Before anything is sent, RabbitGUI shows a preview of the values it will use. Use that to confirm exchange and routing key match your intent.

Republish messages modal rabbitgui

You can override the routing key or exchange by selecting Custom and choosing the value you need.

Overriding routing key

Large DLQs can generate a sharp spike of publishes. In the re-publish modal, enable Throttling and set a rate so the broker and downstream consumers are not overwhelmed.

Throttling also allows real time messages to pass in between republished messages without having to wait for the entire batch to finish before being handled.

Throttling rabbitgui messages