rabbitmqctl, rabbitmqadmin und rabbitmq-plugins sind die Verwaltungswerkzeuge für RabbitMQ. Sie steuern Knoten, Queues, Exchanges, Bindings und Benutzer – teils direkt auf dem Host, teils über die Verwaltungs-API. Diese Referenz zeigt die wichtigen Aufrufe.

Knoten und Status

rabbitmqctl status                 # Übersicht: Version, Ports, Speicher
rabbitmqctl cluster_status         # Cluster-Mitglieder und Partitionen
rabbitmqctl node_health_check      # Erreichbarkeit der Erlang VM
rabbitmqctl environment | head -40 # effektive Umgebung
rabbitmqctl version

# Dienste
systemctl status rabbitmq-server
rabbitmq-diagnostics ping
rabbitmq-diagnostics listeners

Verwaltungs-Plugin und HTTP-API

rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins list -m -e         # aktivierte Plugins

# Oberfläche läuft dann auf Port 15672
# API-Beispiel mit curl
curl -u admin:pw http://localhost:15672/api/overview | jq .
curl -u admin:pw http://localhost:15672/api/queues | jq '.[] | {name, messages}'

Benutzer und Rechte

rabbitmqctl add_user app 'geheim'
rabbitmqctl set_user_tags app monitoring
rabbitmqctl set_permissions -p / app "^app-.*" "^app-.*" "^app-.*"
rabbitmqctl list_users
rabbitmqctl list_permissions -p /
rabbitmqctl change_password app 'neu'
rabbitmqctl delete_user gast

Die drei Muster bei set_permissions sind reguläre Ausdrücke für configure, write und read. .* gibt Vollzugriff; ein enges Muster wie ^app-.* beschränkt eine Anwendung auf ihre eigenen Ressourcen – der richtige Weg in Mehrbenutzerumgebungen.

Virtual Hosts

rabbitmqctl add_vhost staging
rabbitmqctl list_vhosts
rabbitmqctl set_permissions -p staging app ".*" ".*" ".*"
rabbitmqctl delete_vhost staging

Queues und Nachrichten

rabbitmqctl list_queues name messages consumers
rabbitmqctl list_queues -p / name messages_ready messages_unacknowledged

# Detailliert inklusive Wartenden
rabbitmqctl list_queues name messages consumers memory

# Queue löschen (auch mit Nachrichten)
rabbitmqctl delete_queue aufgaben

# Purge: Nachrichten entfernen, Queue behalten
rabbitmqctl purge_queue aufgaben

# Nachricht testweise einstellen (Plugin rabbitmq_management nötig)
rabbitmqadmin publish exchange=amq.default routing_key=aufgaben payload='{"id":1}'

Consumer und Kanäle

rabbitmqctl list_consumers
rabbitmqctl list_channels name consumer_count messages_unacknowledged
rabbitmqctl list_connections name user peer_host state
rabbitmqctl close_connection "<name>" "Wartung"

messages_unacknowledged ist der wichtigste Wert bei Problemen: Wächst er, verarbeitet ein Consumer zu langsam oder bestätigt er Nachrichten nicht. Ein häufiger Fehler ist aktiviertes Auto-Ack zusammen mit einer Ausnahme im Verarbeitungscode – die Nachricht ist dann verloren, obwohl die Verarbeitung scheiterte.

Policies, Exchanges und Bindings

# Wartezeiten und Ablauf je Muster setzen
rabbitmqctl set_policy ttl "aufgaben.*" '{"message-ttl":3600000}' --apply-to queues

# Spiegelung über Queues (klassische HA)
rabbitmqctl set_policy ha-all "^ha\." \
  '{"ha-mode":"all","ha-sync-mode":"automatic"}' --priority 1

rabbitmqctl list_policies
rabbitmqctl list_exchanges
rabbitmqctl list_bindings

# Alles als Definition exportieren und wieder einspielen
rabbitmqctl export_definitions /tmp/definitions.json
rabbitmqctl import_definitions /tmp/definitions.json

export_definitions und import_definitions sind das praktischste Werkzeug überhaupt: Sie sichern Benutzer, Rechte, Exchanges, Queues, Bindings und Policies in einer JSON-Datei und stellen sie auf einem anderen Knoten wieder her.

Betrieb und Diagnose

rabbitmqctl list_queues name messages messages_ready messages_unacknowledged \
  | sort -k2 -n -r | head -20          # die größten Queues

rabbitmq-diagnostics memory_breakdown
rabbitmq-diagnostics check_running
rabbitmq-diagnostics check_local_alarms
rabbitmq-queues rebalance all           # Queue-Leader verteilen

# Sicher stoppen
rabbitmqctl stop_app
rabbitmqctl start_app
rabbitmqctl stop

Praxis-Tipps

  • Warteschlangenlänge überwachen: Eine Queue, die dauerhaft wächst, ist die früheste Anzeige eines Problems – früher als jeder Fehler im Log.
  • Keine unbegrenzten Queues: max-length oder max-length-bytes mit einer toten Briefkasten-Queue (dead-letter) verhindert, dass ein Speicherproblem aus einem Ausfall entsteht.
  • Definitionen exportieren: In einem automatisierten Betrieb lässt sich die gesamte Topologie aus einer versionierten JSON-Datei aufbauen – das ist reproduzierbarer als Handarbeit in der Oberfläche.
  • Auto-Ack sparsam: Nur wo Verlust unproblematisch ist. Sonst manuell bestätigen und idempotente Verarbeitung vorsehen, damit ein Wiederholen nichts kaputt macht.

Verwandte Grundlagen: Message Queue, Dead-Letter-Queue, Message Broker, NATS-Befehle.