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:

bash
Queue in flow control: publishing rate throttled due to slow consumer

Why This Happens

  1. 1.No consumers - Consumers disconnected or stopped
  2. 2.Consumer slow - Processing rate below publish rate
  3. 3.Unacked messages - Consumers not acknowledging
  4. 4.Flow control - Broker throttling publishes
  5. 5.Consumer errors - Consumer failing to process
  6. 6.Queue memory limit - Queue exceeded memory limit
  7. 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

CheckCommandExpected
Queue messageslist_queuesLow count
Consumerslist_consumersActive consumers
Unackedmessages_unackedLow count
Flow controlAPI checkNot active
RabbitMQ memorystatusBelow 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 ```

  • [Fix RabbitMQ Connection Failed](/articles/fix-rabbitmq-connection-failed)
  • [Fix RabbitMQ Cluster Node Down](/articles/fix-rabbitmq-cluster-node-down)