Mode de travail RabbitMQ

Le mode de travail dans RabbitMQ implique la configuration de plusieurs consommateurs pour traiter les messages provenant de la même file d'attente, ce qui peut augmenter la vitesse de traitement concurrent des messages. L'architecture est illustrée dans le diagramme ci-dessous :

Mode de travail RabbitMQ

Remarque : Indépendamment du mode de travail RabbitMQ utilisé, chaque file d'attente prend en charge plusieurs consommateurs, et un message dans la même file d'attente ne sera traité que par l'un des consommateurs.

1. Tutoriel Préalable

Veuillez lire les sections suivantes pour comprendre les connaissances pertinentes :

2. Implémentation de Multiples Consommateurs en PHP

PHP lui-même ne prend pas en charge les technologies concurrentes telles que le multi-threading et les coroutines, il utilise donc généralement des processus multiples pour obtenir un traitement concurrent. Ici, nous utilisons le mode multi-processus pour mettre en œuvre le traitement concurrent des consommateurs qui traitent les messages dans la file d'attente.

2.1. Démarrer Manuellement Plusieurs Processus

Pour mettre en place plusieurs processus, la manière la plus simple est d'exécuter manuellement la commande PHP plusieurs fois.

Par exemple : En supposant que le script du consommateur de la section précédente est recv.php, nous pouvons ouvrir plusieurs fenêtres de terminal et exécuter plusieurs fois le script du consommateur de cette manière :

php recv.php

php recv.php

Ou dans la même fenêtre de terminal, exécutez le script en arrière-plan de cette manière :

php recv.php &
php recv.php &

Explication : L'inconvénient de mettre en place plusieurs consommateurs de cette manière manuelle est que les processus ne sont pas bien entretenus, sans surveillance des processus. Si un processus se bloque, il ne redémarrera pas automatiquement.

2.2. Utilisation de Supervisor pour Mettre en Place Plusieurs Processus

Supervisor est un moniteur de processus dans le système d'exploitation Linux, qui peut surveiller les processus PHP. Si un processus PHP se bloque, il redémarrera automatiquement. Il peut également configurer la concurrence des processus, ce qui rend facile d'obtenir un traitement concurrent de plusieurs consommateurs.

Voici un exemple avec Ubuntu, similaire pour d'autres distributions Linux.

Installation de Supervisor

sudo apt-get install supervisor

Configuration de Supervisor

Le fichier de configuration pour Supervisor est généralement situé dans le répertoire /etc/supervisor/conf.d. Dans ce répertoire, vous pouvez créer un nombre quelconque de fichiers de configuration pour indiquer à Supervisor comment surveiller nos processus. Par exemple, créez un fichier rabbitmq-worker.conf pour surveiller nos processus consommateurs.

Exemple : Fichier : rabbitmq-worker.conf

[program:rabbitmq-worker]
process_name=%(program_name)s_%(process_num)02d
command=php recv.php
autostart=true
autorestart=true
user=root
numprocs=10
redirect_stderr=true
stdout_logfile=/var/log/worker.log

Explication des paramètres :

  • process_name : Définition du nom du processus, peut être nommé arbitrairement. Ici, deux variables sont utilisées : program_name (nom du processus) et process_num (numéro du processus).
  • command : La commande que nous devons exécuter.
  • autostart : Démarrer automatiquement au démarrage.
  • autorestart : Redémarrer automatiquement.
  • user : Le compte système à utiliser pour exécuter la commande.
  • numprocs : Nombre de processus simultanés, indiquant combien de processus démarrer.
  • stdout_logfile : Où enregistrer le fichier journal d'exécution.