[RabbitMQ](https://www.rabbitmq.com/) est un système de gestion de file d'attentes. Il est écrit en Erlang et implémente le protocole AMQP (Advanced Message Queuing Protocol). Il est notamment utile pour gérer des tâches asynchrones.
La documentation officielle propose un [ensemble de tutoriels](https://www.rabbitmq.com/getstarted.html) pour Python, Java, Ruby, PHP, etc.
Les lignes suivantes proposent un cas d'utilisation minimal avec un émetteur, une queue et un récepteur, le tout illustré en PHP. (Voir [ici](https://www.rabbitmq.com/tutorials/tutorial-one-php.html) pour la source d'inspiration).
On peut obtenir des infos sur les queues gérées par RabbitMQ avec la commande suivante :
~~~
# rabbitmqctl list_queues
~~~
Note : en production, avec PHP, il est recommandé d'utiliser [amqproxy](https://github.com/cloudamqp/amqproxy) pour une meilleure persistance des connexions.
> **Activer le tracing des messages cause une réduction de performance qui peut être importante.**
Afin d'obtenir un log des messages passant par un cluster rabbitmq, il est possible d'activer sa fonction de tracing.
Soit en créant un échange `amq.rabbitmq.trace` avec la commande `rabbitmqctl trace_on` (la désactivation globale étant avec `rabbitmqctl trace_off`).
Soit par l'intermédiaire du plugin `rabbitmq_tracing` qui permet l'écriture de ces traces dans des fichiers de logs et la gestion de ce qui est tracé par l'interface de gestion.
Pour activer le plugin `rabbitmq_tracing` il faut faire les actions suivantes:
1. Activer le plugin.
```
# rabbitmq-plugins enable rabbitmq_tracing
```
2. Configurer le plugin dans `/etc/rabbitmq/rabbitmq.conf`. L'utilisateur configuré doit avoir les droits de créé une queue, de la lié à `amq.rabbitmq.trace` et de consommé les messages dans cette queue.
```
[...]
{rabbitmq_tracing,
[
{directory, "/path/to/tracing/log/directory"},
{username, <<"admin">>},
{password, <<"password">>}
]
},
[...]
```
3. Redémarrer le cluster RabbitMQ.
4. Les administrateurs devraient à présent avoir accès à un onglet "Tracing" dans l'interface de gestion.
Attention, *rabbitmq_connections* utilise la commande `rabbitmqctl` vous devez donc adapter le script ou configurer `/etc/munin/plugin-conf.d/munin-node` ainsi :
Si des queues ne fonctionnent plus et que vous retrouvez une erreur contenant `vhost '/' is down` dans les logs `/var/log/rabbitmq/rabbit@${HOSTNAME}.log` vous pouvez tenter de relancer le vhost en question en exécutant :
```
# rabbitmqctl restart_vhost
```
Il est probable que cette commande retourne une erreur qui produise dans les logs des `CRASH REPORT` faisant référence à des chemins du style `/var/lib/rabbitmq/mnesia/rabbit@$HOSTNAME/msg_stores/vhosts/628WB79CIFDYO9LJ`. Il se peut que la cause du problème soit l'arrêt impromptu de rabbitmq qui peut entrainer un mauvais nettoyage des fichiers d'état qui alors bloquent le fonctionnement correct du service. Dans ce cas-là il faut arrêter le service, supprimer les données problématiques puis relancer le service :