What's Actually Happening
RabbitMQ queue messages are not being consumed. Messages pile up in the queue, consumers are not processing, or queue shows unacked messages.
The Error You'll See
Queue depth growing:
```bash rabbitmqctl list_queues name messages
my-queue 50000 ```
Unacked messages:
```bash rabbitmqctl list_queues name messages_unacked
my-queue 1000 ```
Flow control:
Queue in flow control: publishing rate throttled due to slow consumerWhy This Happens
- 1.No consumers - Consumers disconnected or stopped
- 2.Consumer slow - Processing rate below publish rate
- 3.Unacked messages - Consumers not acknowledging
- 4.Flow control - Broker throttling publishes
- 5.Consumer errors - Consumer failing to process
- 6.Queue memory limit - Queue exceeded memory limit
- 7.Network issue - Consumer connection unstable
Step 1: Check Queue Status
```bash rabbitmqctl list_queues name messages consumers
rabbitmqctl list_queues name messages messages_ready messages_unacked
rabbitmqctl list_queues name consumers consumer_utilisation
curl -s http://localhost:15672/api/queues | jq .[] | {name: .name, messages: .messages, consumers: .consumers}
curl -s http://localhost:15672/api/queues/%2F/my-queue | jq
curl -s http://localhost:15672/api/queues/%2F/my-queue | jq .message_stats
curl -s http://localhost:15672/api/queues/%2F/my-queue | jq .memory ```
Step 2: Check Consumer Status
```bash rabbitmqctl list_connections
rabbitmqctl list_consumers
curl -s http://localhost:15672/api/consumers | jq
curl -s http://localhost:15672/api/queues/%2F/my-queue | jq .consumer_details
rabbitmqctl list_channels
ps aux | grep consumer-app
systemctl status consumer-service
journalctl -u consumer-service -f
systemctl restart consumer-service ```
Step 3: Check Unacked Messages
```bash rabbitmqctl list_queues name messages_unacked
rabbitmqctl list_channels name messages_unacked
grep -i ack /var/log/consumer.log
curl -s http://localhost:15672/api/queues/%2F/my-queue | jq .consumer_details[].channel_details
rabbitmqctl close_channel channel-pid ```
Step 4: Check Flow Control
```bash curl -s http://localhost:15672/api/queues/%2F/my-queue | jq .backing_queue_status.is_flow
tail -f /var/log/rabbitmq/rabbit@hostname.log
grep -i flow control /var/log/rabbitmq/*.log
curl -s http://localhost:15672/api/nodes | jq .[].mem_used
curl -s http://localhost:15672/api/nodes | jq .[].mem_alarm
curl -s http://localhost:15672/api/nodes | jq .[].disk_free_alarm ```
Step 5: Check Consumer Performance
```bash grep -i processed /var/log/consumer.log | tail -100
top -p $(pgrep -f consumer-app)
ps aux | grep consumer-app | awk {print $4}
ulimit -a
curl -s http://localhost:15672/api/connections | jq .[] | {name: .name, recv_oct: .recv_oct} ```
Step 6: Check Queue Configuration
```bash curl -s http://localhost:15672/api/queues/%2F/my-queue | jq .arguments
# Key queue arguments: # x-message-ttl: Message time-to-live # x-max-length: Maximum queue length # x-max-length-bytes: Maximum queue size in bytes
rabbitmqctl list_queues name | grep dlq
curl -s http://localhost:15672/api/queues/%2F/my-queue | jq .type
curl -s http://localhost:15672/api/queues/%2F/my-queue | jq .lazy ```
Step 7: Check RabbitMQ Server Status
```bash rabbitmqctl status
ps aux | grep rabbit
rabbitmqctl status | grep -A 10 memory
df -h /var/lib/rabbitmq
tail -f /var/log/rabbitmq/rabbit@hostname.log
grep -i error /var/log/rabbitmq/*.log | tail -30
systemctl status rabbitmq-server
systemctl restart rabbitmq-server ```
Step 8: Manage Queue Messages
```bash rabbitmqctl purge_queue my-queue
curl -X DELETE http://localhost:15672/api/queues/%2F/my-queue/contents
rabbitmqctl delete_queue my-queue
rabbitmq-plugins enable rabbitmq_shovel ```
Step 9: Optimize Consumer Configuration
```bash # Set prefetch via channel: # channel.basic_qos(prefetch_count=10)
curl -s http://localhost:15672/api/queues/%2F/my-queue | jq .consumer_details[].prefetch_count
# Consumer ack mode: # auto_ack: fastest, no unacked # manual_ack: control, but risk unacked
# Optimize based on: # - Consumer processing speed # - Message importance # - Recovery needs ```
Step 10: Monitor Queue Health
```bash rabbitmqctl list_queues name messages messages_unacked consumers
watch -n 10 curl -s http://localhost:15672/api/queues | jq .[] | {name: .name, messages: .messages}
curl -s http://localhost:15672/api/metrics
# Use rabbitmq_exporter for Prometheus ```
RabbitMQ Queue Stuck Checklist
| Check | Command | Expected |
|---|---|---|
| Queue messages | list_queues | Low count |
| Consumers | list_consumers | Active consumers |
| Unacked | messages_unacked | Low count |
| Flow control | API check | Not active |
| RabbitMQ memory | status | Below limit |
Verify the Fix
```bash rabbitmqctl list_queues name messages
rabbitmqctl list_queues name consumers
rabbitmqctl list_queues name messages_unacked
curl -s http://localhost:15672/api/queues/%2F/my-queue | jq .message_stats.deliver_get_details.rate
journalctl -u rabbitmq-server --since 10 min ago | grep -i error ```
Related Issues
- [Fix RabbitMQ Connection Failed](/articles/fix-rabbitmq-connection-failed)
- [Fix RabbitMQ Cluster Node Down](/articles/fix-rabbitmq-cluster-node-down)