The RabbitMQ Management UI is the web interface that ships with RabbitMQ. It shows your queues, exchanges, connections and message rates, and lets you create, delete and purge things without writing code. This guide covers how to turn it on, how to reach it, what each tab does, and where it stops being enough.
Enable the plugin, then open port 15672 in your browser:
rabbitmq-plugins enable rabbitmq_managementhttp://localhost:15672On a fresh install, log in with guest / guest. That user only works from localhost (see RabbitMQ default login). If you use Docker, pick an image tag that ends in -management and map port 15672:
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:4-managementThe Management UI is a plugin called rabbitmq_management. It adds two things on the same port, 15672:
It's the tool most people use to look inside RabbitMQ, because it's free, built in, and works with every client library. It's also showing its age, which we'll get to in the limits section.
The plugin ships with RabbitMQ but isn't enabled by default on package installs (Debian, RPM, Homebrew, Windows installer):
rabbitmq-plugins enable rabbitmq_managementNo restart is needed. To check which plugins are on:
rabbitmq-plugins listEnabled plugins are marked [E*] (explicitly enabled) or [e*] (enabled as a dependency). To turn it off again, run rabbitmq-plugins disable rabbitmq_management.
The official image comes in two flavors. rabbitmq:4 has no management plugin. rabbitmq:4-management has it enabled. Use the -management tag and publish port 15672:
services:
rabbitmq:
image: rabbitmq:4-management
ports:
- '5672:5672' # AMQP
- '15672:15672' # Management UI and HTTP API
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: change_meIf you set RABBITMQ_DEFAULT_USER, the guest user is never created, so log in with the credentials you set. The full setup is in RabbitMQ with Docker and Docker Compose.
The RabbitMQ Cluster Operator enables the management plugin by default. The UI is served by the cluster's Service on port 15672. To reach it from your machine:
kubectl port-forward service/my-rabbit 15672:15672Then open http://localhost:15672. The operator generates the default user. Read its credentials from the my-rabbit-default-user secret.
Hosted RabbitMQ providers enable the UI for you:
The default URL is:
http://<host>:15672Port 15672 is for the UI and the HTTP API. Port 5672 is for AMQP clients. Opening http://localhost:5672 in a browser won't show the UI. The RabbitMQ ports guide lists every port and what it's for.

In rabbitmq.conf:
management.tcp.port = 15673If you expose the UI under a path, for example https://ops.example.com/rabbitmq/, tell RabbitMQ about the prefix so links and API calls resolve:
management.path_prefix = /rabbitmqThe proxy must forward /rabbitmq/ to port 15672 with the prefix kept. It also must not decode the %2F in URLs: the default virtual host / is encoded as %2F in every API path, and a proxy that decodes it breaks most pages.
To serve the UI over TLS, configure the listener on port 15671:
management.ssl.port = 15671
management.ssl.cacertfile = /path/to/ca_certificate.pem
management.ssl.certfile = /path/to/server_certificate.pem
management.ssl.keyfile = /path/to/server_key.pemYou can run both listeners, or keep only the TLS one by removing management.tcp.port.
Any RabbitMQ user can authenticate, but only users with a management tag can use the UI. The tag sets what they see:
| Tag | What the user can do in the UI |
|---|---|
management | See and manage the virtual hosts they have permissions on |
policymaker | Same as management, plus manage policies and parameters in those virtual hosts |
monitoring | See all connections, channels and node metrics, across every virtual host |
administrator | Everything, including users, virtual hosts, permissions and global settings |
Create an administrator for remote access:
rabbitmqctl add_user admin 'a-strong-password'
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"Why guest fails remotely: RabbitMQ restricts the guest user to loopback connections (loopback_users.guest = true by default). Logging in as guest from another machine, or from your laptop to a server, fails with "Login failed". Create a real user rather than lifting that restriction. The default login guide covers both options.
The top of every page shows the RabbitMQ and Erlang versions, the cluster name, the logged-in user, and two dropdowns: one for the refresh interval (5 seconds by default) and one to filter everything by virtual host.

The health of the whole cluster on one page:
Every client TCP connection: the client's address, the user, the protocol (AMQP 0-9-1, AMQP 1.0, MQTT, STOMP), TLS, state, and network rates. Click one to see its channels and client properties, such as the library name and version, or the connection_name your app set. You can also force-close a connection from here, which helps when a stuck client holds unacked messages.
The channels opened on those connections, with their prefetch count, the number of unacknowledged messages, and per-channel rates. A channel with a growing unacked count and no acks usually points to a consumer that crashed without closing, or one that forgot to ack. See message acknowledgment explained.
All exchanges with their type (direct, fanout, topic, headers, or plugin types like x-delayed-message), features (D for durable, AD for auto-delete, I for internal) and rates. Click one to see its bindings, add a binding, publish a test message, or delete it. The exchange types guide explains how each type routes.
The page you'll use most. Each queue shows its type (classic, quorum, stream), features (durable, TTL, dead-letter exchange, max length…), state, ready / unacked / total message counts and rates.

Click a queue to open its detail page:
rabbitmq_shovel_management plugin is enabled), Delete and Purge.
The administrator area, with a side menu:
Plugins add their own pages here, for example Shovel and Federation status.
In Queues and Streams, open Add a new queue. Pick the virtual host, the type (prefer quorum for anything that matters), a name, and optional arguments like x-dead-letter-exchange or x-message-ttl. Prefer policies over arguments for settings you may want to change later: queue arguments can't be changed once the queue exists.
Open the exchange (or the queue), find Add binding, then enter the other side and a routing key. For topic exchanges, * matches one word and # matches zero or more.
Open a queue or an exchange and expand Publish message. Set a routing key, headers, properties (content_type, delivery_mode = 2 for persistent) and a payload.

Publishing from a queue page goes through the default exchange, with the queue name as routing key. To test real routing, publish from the exchange page instead. For anything beyond a one-off test, see how to manually publish messages to RabbitMQ.
Get messages on a queue page is the only way to read message contents in the UI, and it is not a read-only peek. It consumes messages, then acts on them according to the Ack mode you choose:

It also only shows a handful of messages at a time, with no search. If you need to look through a queue, read how to browse RabbitMQ messages without consuming them.
Purge Messages at the bottom of the queue page deletes every ready message. Unacked messages stay until their consumer acks or disconnects. There's no undo.
Admin → Policies → Add / update a policy. Give a name, a regex pattern (^orders\. for every queue starting with orders.), what it applies to, a priority, and definitions such as dead-letter-exchange = dlx. Policies apply live to existing queues. That's the main reason to prefer them over queue arguments.
Everything the UI shows comes from the HTTP API on the same port, so you can script it with the same credentials:
curl -u admin:password http://localhost:15672/api/queues/%2F/ordersThis is how monitoring scripts, CI checks and desktop clients get their data. The RabbitMQ monitoring API guide lists the useful endpoints and metrics.
The Management UI is reliable and always there, but it was designed as an admin console, not a debugging tool. The usual pain points:
If you're comparing options, we keep an up-to-date list of RabbitMQ Management UI alternatives, and a feature-by-feature RabbitGUI vs Management UI comparison.
rabbitmq-diagnostics listeners should list http on 15672.management.tcp.port or set management.path_prefix, use the new port or path.-management. Plain rabbitmq:4 has no UI.-p 15672:15672.docker logs rabbitmq shows Server startup complete when it's ready.You're probably logging in as guest from outside localhost, or the image created a different default user because RABBITMQ_DEFAULT_USER is set. Also check the user has a management tag: a user with no tags can connect over AMQP but can't log in to the UI.
management.rates_mode at its default (basic) instead of detailed.rabbitmq_prometheus plugin) rather than polling the management API.Statistics may be disabled. RabbitMQ 4 can run with management_agent.disable_metrics_collector = true, a common setting when Prometheus is the main monitoring tool. In that case the UI shows objects but no rates. Re-enable it, or read rates from Prometheus.
http://localhost:15672 on a local install, or http://<server>:15672 on a server, once the rabbitmq_management plugin is enabled.
guest / guest, and only from localhost. On Docker, the RABBITMQ_DEFAULT_USER and RABBITMQ_DEFAULT_PASS variables replace it.
Run rabbitmq-plugins enable rabbitmq_management. In Docker, use an image tag ending in -management, such as rabbitmq:4-management.
15672 for HTTP and 15671 for HTTPS. AMQP clients use 5672, not 15672.
Only with "Get messages", which consumes messages and requeues or removes them depending on the ack mode. There is no read-only browse. Desktop clients like RabbitGUI copy messages locally so you can search them without affecting the queue.
Avoid it. Keep it on a private network or behind a VPN or an authenticating reverse proxy, enable TLS on 15671, remove or restrict guest, and give each person their own user with the smallest tag they need.
See how RabbitGUI can make your everyday RabbitMQ workflows easier.
Available on Windows, Mac, and Linux.

RabbitMQ tutorialRabbitMQ retry queue vs dead letter queue: what's the difference?A retry queue holds a failed RabbitMQ message before another attempt, a dead-letter queue holds it once it should no longer be processed. Learn when to use each, how to combine them, and how they differ from requeue.
RabbitMQ tutorialRabbitMQ exponential backoff: how to retry messages with increasing delaysHow to implement exponential backoff retries in RabbitMQ with TTL retry queues and dead-letter exchanges. Track attempts with an x-retry-count header, choose retry delays, and send final failures to a DLQ.
RabbitMQ tutorialWhat is AMQP? The Advanced Message Queuing Protocol explainedLearn what AMQP (Advanced Message Queuing Protocol) is, how it works, its core concepts, why it powers RabbitMQ, and how it compares to alternatives like MQTT, STOMP, and Kafka.
RabbitMQ tutorialBuilding an event bus with RabbitMQLearn how to design a decoupled event bus using a RabbitMQ topic exchange, with practical routing key conventions, durable queues, and animated diagrams showing message flow.
RabbitMQ tutorialRabbitMQ Retry Pattern: How to Retry Failed MessagesHow to retry failed messages in RabbitMQ without infinite requeue loops. Compare retry queues with TTL, exponential backoff and the delayed message exchange, cap retry attempts, and send final failures to a dead-letter queue.
RabbitMQ tutorialRabbitMQ exchange types explained: direct vs topic vs fanout vs headersLearn the 4 RabbitMQ exchange types: direct, fanout, topic and headers. See how routing keys work, when to use each exchange, and examples with animations.