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 :
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 :
- Concepts Fondamentaux de RabbitMQ
- Mode de Travail de RabbitMQ
- Démarrage Rapide pour PHP dans RabbitMQ (À lire absolument, car les sections ultérieures ne dupliqueront pas le code, montrant uniquement le code clé)
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) etprocess_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.