Commandes RabbitMQ Essentielles pour la Gestion des Files d'Attente : Déclarer, Lister, Supprimer
Maîtrisez la gestion essentielle des files d'attente à l'aide de l'interface en ligne de commande `rabbitmqctl`. Ce guide pratique couvre les actions fondamentales nécessaires à l'administration quotidienne de RabbitMQ : déclarer de nouvelles files d'attente avec des paramètres de durabilité appropriés, lister les files d'attente à l'aide de métriques personnalisées (`messages_ready`, `consumers`, `memory`) pour une surveillance efficace, et supprimer ou vider en toute sécurité les files d'attente pour gérer les arriérés opérationnels. Apprenez les commandes précises et les meilleures pratiques pour garantir une infrastructure de messagerie stable et performante.
Commandes RabbitMQ Essentielles pour la Gestion des Files d'Attente : Déclarer, Lister, Supprimer
La gestion des files d'attente dans RabbitMQ semble simple jusqu'à ce que vous le fassiez lors d'un incident. Une file d'attente a un nom, un hôte virtuel, des arguments, des consommateurs, des liaisons, des messages, et parfois des politiques superposées. Supprimer la mauvaise file d'attente ou la déclarer avec les mauvaises propriétés peut casser une application aussi rapidement qu'une panne de courtier.
Les commandes ci-dessous se concentrent sur le travail quotidien : déclarer une file d'attente lorsque vous devez préparer l'infrastructure, lister les files d'attente lorsque vous devez comprendre l'état du courtier, et supprimer ou vider les files d'attente lorsque vous souhaitez intentionnellement retirer quelque chose. Les exemples utilisent rabbitmqctl, mais la même prudence s'applique si vous utilisez l'interface de gestion ou l'API HTTP.
Prérequis et l'Outil rabbitmqctl
Pour exécuter les commandes décrites dans cet article, vous devez avoir un accès en ligne de commande à une machine où les outils de gestion RabbitMQ sont installés, ou où rabbitmqctl peut se connecter au cluster cible. Des autorisations sont généralement nécessaires pour effectuer ces opérations administratives.
La syntaxe générale des commandes rabbitmqctl est :
rabbitmqctl <commande> [arguments]
Tous les exemples ci-dessous supposent l'hôte virtuel par défaut (/). Si la file d'attente se trouve dans un autre vhost, ajoutez -p <nom_vhost>. Cela est important car orders dans /prod et orders dans /staging sont des files d'attente différentes.
1. Déclarer de Nouvelles Files d'Attente (declare_queue)
La déclaration de file d'attente est le processus de création d'une file d'attente sur le courtier. Bien que les files d'attente soient généralement déclarées par les applications clientes lors de la connexion, la déclaration administrative via rabbitmqctl est utile pour la configuration, les tests ou la définition de files d'attente très spécifiques avant que les connexions clientes ne soient établies.
La commande declare_queue vous permet de définir les propriétés essentielles de la file d'attente, telles que la durabilité, l'exclusivité et la suppression automatique.
Déclaration de Base d'une File d'Attente
La commande la plus simple déclare une file d'attente avec les paramètres par défaut. Dans la syntaxe actuelle de l'interface CLI RabbitMQ, les propriétés de la file d'attente sont passées sous forme de paires clé-valeur :
rabbitmqctl declare_queue name=ma_nouvelle_file durable=false
Définir les Propriétés de la File d'Attente
Les paramètres clés sont utilisés pour contrôler la persistance et le cycle de vie de la file d'attente :
| Paramètre | Description | Défaut | Justification |
|---|---|---|---|
durable |
Si true, la définition de la file d'attente persiste après les redémarrages du courtier. |
false |
Critique pour les files d'attente qui doivent survivre aux pannes système. |
exclusive |
Si true, la file d'attente ne peut être consommée que par la connexion déclarante et est supprimée lorsque cette connexion se ferme. |
false |
Utilisé pour les ressources temporaires et privées. |
auto_delete |
Si true, la file d'attente est supprimée lorsque le dernier consommateur se déconnecte. |
false |
Utile pour les files d'attente éphémères de courte durée. |
Exemple : Déclarer une File d'Attente Durable
Une définition de file d'attente durable survit au redémarrage du courtier. La survie des messages dépend également du mode de livraison des messages et du comportement de stockage, ne traitez donc pas une file d'attente durable comme une garantie que chaque message est persistant.
rabbitmqctl declare_queue name=file_durable_production durable=true
Exemple : Déclarer une File d'Attente Temporaire à Suppression Automatique
rabbitmqctl declare_queue name=file_temporaire_travailleur auto_delete=true
Astuce : Si la file d'attente existe déjà,
declare_queueréussira uniquement si les propriétés spécifiées correspondent aux propriétés de la file d'attente existante. Si les propriétés diffèrent, la commande échouera, empêchant une mauvaise configuration accidentelle.
Cet échec est utile. Si une application s'attend à une file d'attente de quorum durable et qu'un opérateur déclare accidentellement une file d'attente classique transitoire avec le même nom, RabbitMQ doit rejeter l'incompatibilité au lieu de modifier silencieusement la sémantique.
2. Lister et Inspecter les Files d'Attente (list_queues)
La surveillance de l'état des files d'attente est une tâche administrative fréquente. La commande list_queues est très flexible, vous permettant de spécifier exactement les métriques que vous devez voir, évitant ainsi une surcharge d'informations.
Liste de Base
Par défaut, list_queues affiche les colonnes courantes telles que le nom de la file d'attente, le nombre total de messages et les consommateurs. Pour le travail opérationnel, il est préférable de demander les colonnes exactes dont vous avez besoin.
rabbitmqctl list_queues
Exemple de sortie :
Timeout: 60.0 seconds...
Listing queues for vhost /
name messages consumers
ma_nouvelle_file 0 1
file_durable_production 150 2
Lister des Propriétés Spécifiques de la File d'Attente
Pour obtenir des informations opérationnelles plus approfondies, vous pouvez spécifier une liste de noms de colonnes séparés par des espaces. Ceci est crucial pour résoudre les problèmes de nombre élevé de messages ou d'utilisation de la mémoire.
Colonnes Essentielles pour la Surveillance :
| Nom de Colonne | Description |
|---|---|
messages_ready |
Messages disponibles pour la livraison (prêts à être consommés). |
messages_unacknowledged |
Messages livrés mais pas encore acquittés par un consommateur. |
consumers |
Le nombre de consommateurs actifs attachés à la file d'attente. |
memory |
Utilisation estimée de la mémoire de la file d'attente sur le nœud (en octets). |
policy |
Le nom de toute politique appliquée à la file d'attente. |
state |
L'état opérationnel de la file d'attente (par exemple, running, flow, idle). |
type |
Type de file d'attente, comme classic ou quorum, sur les versions de RabbitMQ qui l'exposent. |
Exemple : Inspection Détaillée d'une File d'Attente
Pour vérifier l'arriéré actuel, l'état de santé du consommateur et l'application de la politique, utilisez :
rabbitmqctl list_queues name messages_ready messages_unacknowledged consumers memory policy
Lisez les nombres ensemble. Une file d'attente avec un messages_ready élevé et zéro consommateur signifie généralement qu'aucun consommateur n'est attaché. Une file d'attente avec peu de messages prêts mais un messages_unacknowledged élevé indique des consommateurs qui ont reçu des messages mais ne les acquittent pas. Cela pourrait être un travail lent, des travailleurs plantés, un nombre de prélecture surdimensionné ou un bogue qui n'appelle jamais ack/nack.
Lister les Files d'Attente sur un Hôte Virtuel Spécifique
Si vous devez vérifier les files d'attente en dehors de l'hôte virtuel par défaut, utilisez l'indicateur -p.
rabbitmqctl list_queues -p /api_vhost name messages consumers
3. Supprimer et Vider les Files d'Attente (delete_queue et purge_queue)
Lorsqu'une file d'attente est obsolète ou doit être réinitialisée, vous avez deux options principales : supprimer toute la structure de la file d'attente, ou vider son contenu tout en conservant la structure intacte.
Supprimer une File d'Attente (delete_queue)
La commande delete_queue supprime définitivement la file d'attente et tous les messages actuellement stockés dans celle-ci. Cette action est irréversible.
rabbitmqctl delete_queue mon_ancienne_file
Avertissement : Risque de Perte de Données Confirmez toujours que la file d'attente est vide ou que son contenu n'est plus nécessaire avant l'exécution. La suppression d'une file d'attente avec des messages en attente entraîne une perte de données immédiate et permanente pour ces messages.
Vider le Contenu d'une File d'Attente (purge_queue)
Si la structure de la file d'attente (liaisons, durabilité, politiques) doit rester, mais que vous devez effacer tous les messages (par exemple, pour effacer un arriéré de tâches erronées), utilisez purge_queue.
rabbitmqctl purge_queue ma_file_coincee
Cette commande supprime les messages prêts de la file d'attente sans supprimer la définition de la file d'attente. Les messages déjà livrés aux consommateurs et en attente d'accusé de réception ne sont pas simplement effacés par une purge. Si ces consommateurs se déconnectent ou rejettent des messages avec réenfilement activé, certains messages peuvent réapparaître. Lors d'un nettoyage sérieux, arrêtez ou videz d'abord les consommateurs afin de savoir ce que vous purgez.
Gérer les Files d'Attente dans Différents VHosts
Pour vous assurer de supprimer ou de vider la bonne file d'attente, spécifiez toujours l'hôte virtuel si la file d'attente ne se trouve pas dans le contexte par défaut.
# Supprimer une file d'attente dans un hôte virtuel spécifique
rabbitmqctl delete_queue -p /testing_vhost file_test_temporaire
Avant de supprimer, j'exécute généralement :
rabbitmqctl list_queues -p /testing_vhost name messages_ready messages_unacknowledged consumers
Cette seule vérification attrape de nombreuses erreurs : mauvais vhost, consommateurs inattendus, ou une file d'attente qui a encore du travail en cours.
Résumé des Commandes Essentielles
Ce tableau résume les commandes de gestion de base des files d'attente utilisées dans les opérations quotidiennes de RabbitMQ :
| Action | Commande | Objectif |
|---|---|---|
| Déclaration | rabbitmqctl declare_queue name=Q durable=true |
Crée une nouvelle file d'attente avec des propriétés définies. |
| Inspection | rabbitmqctl list_queues name messages consumers |
Liste les files d'attente et les métriques opérationnelles spécifiques. |
| Suppression | rabbitmqctl delete_queue Q |
Supprime définitivement la file d'attente et ses messages prêts. |
| Nettoyage | rabbitmqctl purge_queue Q |
Efface les messages prêts d'une file d'attente tout en conservant la structure. |
L'habitude sûre est simple : incluez toujours le vhost en cas de doute, inspectez avant les commandes destructrices, et rappelez-vous que la déclaration de file d'attente fait partie de votre contrat d'application. Le type de file d'attente, la durabilité, le comportement de suppression automatique et les arguments doivent être traités comme un schéma, pas comme un détail d'exécution anodin.