RabbitMQ Management UI
RabbitMQ Management UI
Section titled “RabbitMQ Management UI”Overview
Section titled “Overview”The RabbitMQ Management UI provides a web interface to monitor and manage the message bus. Essential for debugging message routing, queue depths, and consumer issues.
Accessing Management UI
Section titled “Accessing Management UI”# Open in browseropen http://localhost:15672
# Direct URLhttp://localhost:15672Login Credentials (Default):
- Username:
admin - Password:
admin123
Key Sections
Section titled “Key Sections”1. Overview Tab
Section titled “1. Overview Tab”What it shows:
- Total message rates (publish/deliver)
- Queue totals
- Connection count
- Channel count
- Node health
Use for:
- Quick health check
- Spotting overall issues
- Monitoring message throughput
Key Metrics:
Message Rates: Publish: 100 msg/s (messages being published) Deliver: 95 msg/s (messages being consumed)
Queued Messages: Ready: 500 (waiting to be consumed) Unacked: 50 (being processed) Total: 550
Connections: 12 (active service connections)Channels: 15 (communication channels)2. Connections Tab
Section titled “2. Connections Tab”What it shows:
- Active connections from services
- Connection state
- Client properties
- Message rates per connection
Use for:
- Verifying service connections
- Finding connection issues
- Monitoring per-service throughput
View:
Name State Channelsuser-service-conn-1 running 2api-gateway-conn-1 running 3email-service-conn-1 running 1Click connection to see:
- Client library version
- Connection details
- Channels on this connection
- Message rates
3. Channels Tab
Section titled “3. Channels Tab”What it shows:
- Active channels
- Prefetch settings
- Message rates
- Which connection owns channel
Use for:
- Debugging channel issues
- Checking prefetch configuration
- Monitoring channel activity
View:
Channel Connection State Prefetchuser-service user-service-conn running 10api-gateway api-gateway-conn running 14. Exchanges Tab
Section titled “4. Exchanges Tab”What it shows:
- All exchanges
- Exchange type
- Bindings
- Message rates
Use for:
- Verifying platform exchanges exist
- Testing message publishing
- Checking bindings
Platform Exchanges:
Name Type Bindingsplatform.commands topic 15platform.queries topic 8platform.events topic 20platform.contracts fanout 1Click exchange to:
- View all bindings
- Publish test message
- See exchange details
Publishing Test Message:
1. Click exchange (e.g., platform.commands)2. Expand "Publish message"3. Set routing key: CreateUserCommand4. Set payload: { "messageType": "CreateUserCommand", "data": {"email": "test@example.com"}, "correlationId": "test-123" }5. Click "Publish message"6. Check target queue for message5. Queues Tab
Section titled “5. Queues Tab”What it shows:
- All queues
- Message counts
- Consumer counts
- Message rates
Use for:
- Finding queue buildup
- Checking consumers
- Viewing/purging messages
Platform Queues:
Name Ready Unacked Consumers Rateuser-service.commands 0 1 1 10/suser-service.queries 0 0 1 5/suser-service.events 150 0 0 0/s ← Problem!email-service.commands 0 0 1 2/semail-service.events.failed 25 0 0 0/s ← DLQQueue States:
- Ready: Messages waiting to be consumed
- Unacked: Messages being processed
- Consumers: Active consumers (should be > 0)
- Rate: Messages/second
Click queue to:
- View messages
- Get/purge messages
- View consumers
- View bindings
6. Bindings
Section titled “6. Bindings”What it shows:
- Exchange-to-queue bindings
- Routing keys
- Binding arguments
Use for:
- Verifying message routing
- Debugging routing issues
View Bindings:
Source Destination Routing Keyplatform.commands user-service.commands CreateUserCommandplatform.commands user-service.commands UpdateUserCommandplatform.events user-service.events User.Events.*Common Operations
Section titled “Common Operations”Check Queue Depth
Section titled “Check Queue Depth”Steps:
1. Click "Queues" tab2. Find your service queue3. Look at "Ready" columnInterpretations:
Ready: 0 ✓ Good - messages being consumed immediatelyReady: 10-100 ⚠ Warning - slight backlogReady: 1000+ ❌ Problem - consumer too slow or not runningView Queue Messages
Section titled “View Queue Messages”Steps:
1. Queues tab2. Click queue name3. Scroll to "Get messages"4. Set: - Messages: 10 - Ack mode: Nack message requeue true5. Click "Get Message(s)"Message Details:
Properties: correlation_id: abc-123 content_type: application/json delivery_mode: persistent
Payload:{ "messageType": "CreateUserCommand", "data": { "email": "user@example.com" }, "correlationId": "abc-123"}Ack Modes:
- Nack message requeue true: View without removing (recommended)
- Ack message requeue false: Remove from queue
- Reject requeue true: Return to queue
- Reject requeue false: Send to dead letter queue
Purge Queue
Section titled “Purge Queue”Use when: Need to clear old test messages or reset queue
Steps:
1. Queues tab2. Click queue name3. Scroll to "Purge messages"4. Click "Purge Messages"5. ConfirmWarning: This deletes all messages permanently!
Check Consumers
Section titled “Check Consumers”Steps:
1. Queues tab2. Click queue name3. Scroll to "Consumers"Consumer Details:
Consumer tag: user-service-CreateUserCommand-123Channel: user-service-channel-1Prefetch count: 10Ack required: trueInterpretations:
Consumers: 0 ❌ Problem - no service consuming messagesConsumers: 1-5 ✓ Good - consumers activeConsumers: 10+ ⚠ Warning - many instances (check if intentional)View Dead Letter Queue
Section titled “View Dead Letter Queue”Steps:
1. Queues tab2. Find queue ending with ".failed" (e.g., user-service.commands.failed)3. Click queue name4. Get messages to see failuresFailed Message Analysis:
Check headers for failure reason:
Headers: x-death: - count: 3 reason: rejected queue: user-service.commands time: 2024-01-15T12:00:00Z exchange: platform.commands routing-keys: CreateUserCommandCommon Failure Reasons:
rejected: Handler threw errorexpired: Message TTL exceededmaxlen: Queue length limit exceeded
Debugging Scenarios
Section titled “Debugging Scenarios”Scenario 1: Messages Not Being Consumed
Section titled “Scenario 1: Messages Not Being Consumed”Symptoms:
Queue: user-service.commandsReady: 1500 (growing)Unacked: 0Consumers: 0 ← Problem!Diagnosis:
- No consumers = service not running or not registered
Actions:
# Check service statusdocker ps | grep user-service
# If not running, start itdocker compose up -d user-service
# Check consumer registration# Refresh RabbitMQ UI Queues tab# Consumers should now show: 1Scenario 2: Queue Backlog Growing
Section titled “Scenario 2: Queue Backlog Growing”Symptoms:
Queue: user-service.commandsReady: 5000 (increasing)Unacked: 50Consumers: 1Rate In: 100 msg/sRate Out: 10 msg/s ← Bottleneck!Diagnosis:
Consumer too slow (100 msg/s in, only 10 msg/s out)
Actions:
- Optimize handler (check Jaeger for slow spans)
- Scale service (add more instances)
- Increase prefetch count
Scenario 3: Messages in Dead Letter Queue
Section titled “Scenario 3: Messages in Dead Letter Queue”Symptoms:
Queue: user-service.commands.failedReady: 25Consumers: 0Diagnosis:
Handler errors causing message rejection
Actions:
1. Get messages from DLQ2. Check x-death headers for error details3. Fix handler error4. Requeue messages: - Change ack mode to "Ack message requeue false" - Messages will be moved back to main queueScenario 4: Wrong Routing
Section titled “Scenario 4: Wrong Routing”Symptoms:
Messages published but not reaching queue
Diagnosis:
1. Exchanges tab → platform.commands2. Publish test message3. Routing key: CreateUserCommand4. Check if message appears in user-service.commands queueIf message doesn’t appear:
1. Check bindings Exchanges → platform.commands → Bindings
2. Verify binding exists: To: user-service.commands Routing key: CreateUserCommand
3. If missing, service didn't register handler See: Handlers Not Discovered troubleshootingPerformance Monitoring
Section titled “Performance Monitoring”Message Rates
Section titled “Message Rates”Overview tab shows:
Global Rates: Publish: 500 msg/s Deliver: 450 msg/s Get (no ack): 0 msg/s Ack: 450 msg/s Redeliver: 5 msg/s ← Monitor thisHigh redeliver rate indicates:
- Handler errors
- Processing timeouts
- Consumer crashes
Memory Usage
Section titled “Memory Usage”Overview tab shows:
Memory Used: 250 MBMemory Limit: 2 GBAlarm: noneIf memory alarm triggered:
1. Purge dead letter queues2. Reduce queue buildup3. Increase memory limitConnection Count
Section titled “Connection Count”Overview tab shows:
Connections: 25Expected connections:
Per service: 1 connectionTotal: Number of running services
If connections >> services: - Check for connection leaks - Verify connections being closedAdmin Operations
Section titled “Admin Operations”Create Queue Manually (Rare)
Section titled “Create Queue Manually (Rare)”1. Queues tab2. "Add a new queue"3. Name: my-service.commands4. Durability: Durable5. Auto delete: No6. Click "Add queue"Note: Platform services auto-create queues. Manual creation rarely needed.
Create Binding Manually (Rare)
Section titled “Create Binding Manually (Rare)”1. Exchanges tab2. Click exchange (e.g., platform.commands)3. "Add binding from this exchange"4. To queue: my-service.commands5. Routing key: CreateUserCommand6. Click "Bind"Note: Platform services auto-create bindings. Manual creation only for testing.
Delete Queue
Section titled “Delete Queue”Use when: Removing decommissioned service
1. Queues tab2. Click queue name3. "Delete" button4. ConfirmWarning: Deletes all messages in queue!
Best Practices
Section titled “Best Practices”1. Monitor Dead Letter Queues
Section titled “1. Monitor Dead Letter Queues”Check DLQs daily:
Queues tab → Filter: ".failed"If messages accumulating:
- Fix handler errors
- Investigate and requeue or purge
2. Watch for Queue Buildup
Section titled “2. Watch for Queue Buildup”Set up alerts for:
Ready messages > 1000Rate out < Rate in (sustained)Consumers = 03. Keep Connections Low
Section titled “3. Keep Connections Low”Each service should have exactly 1 connection.
If more:
- Connection leak
- Multiple instances (verify intentional)
4. Regular Cleanup
Section titled “4. Regular Cleanup”Purge DLQs after fixing issues:
1. Verify handler errors fixed2. Test with one message3. Purge remaining old failures5. Test Message Routing
Section titled “5. Test Message Routing”Before deploying new service:
1. Publish test message via exchange2. Verify appears in queue3. Check consumer processes it4. Purge test messagesQuick Reference
Section titled “Quick Reference”Common Checks
Section titled “Common Checks”✓ Service running? → Connections tab → Find service connection
✓ Consumers active? → Queues tab → Click queue → Consumers section
✓ Messages routing? → Exchanges tab → Publish test message
✓ Messages failing? → Queues tab → Find .failed queue → Get messages
✓ Queue backlog? → Queues tab → Check Ready columnRelated Documentation
Section titled “Related Documentation”- Message Bus Issues - Message bus troubleshooting
- Message Bus Architecture - How messaging works
Summary
Section titled “Summary”RabbitMQ Management UI is essential for:
- Queue Monitoring - Check depths and consumer counts
- Message Inspection - View message content and headers
- Routing Verification - Test message routing
- Dead Letter Analysis - Investigate failures
- Performance Monitoring - Watch message rates
Access it frequently during development and troubleshooting. It provides immediate visibility into message flow.