À mesure que l'échelle des systèmes Internet continue de croître, les services d'arrière-plan doivent gérer simultanément un grand nombre de tâches de messagerie. Afin d’éviter le blocage du système et d’améliorer les performances de concurrence, l’introduction d’un mécanisme de file d’attente est devenue une solution courante. PHP combiné à la technologie de file d'attente de messages peut facilement réaliser un traitement asynchrone et efficace des tâches, améliorant ainsi considérablement la stabilité du système et la vitesse de réponse.
Actuellement, il existe une variété de systèmes de files d'attente matures disponibles dans l'écosystème PHP, tels que Beanstalkd, Redis Queue, RabbitMQ, etc. Parmi eux, Beanstalkd est souvent utilisé dans des projets de petite et moyenne taille en raison de ses caractéristiques de déploiement légères, efficaces et faciles. Cet article utilisera Beanstalkd combiné avec la bibliothèque Pheanstalk comme exemple pour expliquer les étapes de mise en œuvre spécifiques.
Après avoir installé Beanstalkd sur le serveur, démarrez le service et il sera disponible :
sudo apt-get install beanstalkd sudo service beanstalkd démarrer
Après un démarrage réussi, Beanstalkd écoute le port 127.0.0.1:11300 par défaut.
Créez un fichier composer.json dans le répertoire racine du projet et ajoutez le contenu suivant :
{
"exiger": {
"pda/pheanstalk": "^3.1"
}
}Exécutez ensuite la commande suivante pour installer les dépendances :
installation du compositeur
Une fois installé, vous pouvez vous connecter à Beanstalkd à l'aide de l'exemple de code suivant :
require_once 'vendor/autoload.php'; utilisez Pheanstalk\Pheanstalk ; $pheanstalk = Pheanstalk::create('127.0.0.1');
À ce stade, le programme PHP s'est connecté avec succès au service de file d'attente.
Les tâches qui doivent être traitées de manière asynchrone peuvent être placées dans la file d'attente au format JSON :
$données = [
'message' => 'Bonjour tout le monde !'
];
$pheanstalk->useTube('mon-tube')->put(json_encode($data));Cet exemple envoie une chaîne JSON contenant le contenu du message vers une file d'attente nommée my-tube .
Le consommateur est responsable de la suppression des messages de la file d'attente et de l'exécution de la logique correspondante. Les exemples sont les suivants :
require_once 'vendor/autoload.php';
utilisez Pheanstalk\Pheanstalk ;
$pheanstalk = Pheanstalk::create('127.0.0.1');
tandis que (vrai) {
$job = $pheanstalk->watch('mon-tube')->reserve();
$data = json_decode($job->getData(), true);
// Traiter les données du message echo $data['message'] . "\n" ;
// Supprime le message traité $pheanstalk->delete($job);
}Ce script continuera à surveiller la file d'attente spécifiée, et une fois qu'il y aura une nouvelle tâche, il sera exécuté immédiatement et supprimera les messages traités pour garantir que les messages de la file d'attente ne seront pas consommés à plusieurs reprises.
L'utilisation de PHP combinée au système de file d'attente Beanstalkd peut améliorer considérablement l'efficacité du traitement des messages et la vitesse de réponse du système. Grâce à la simple encapsulation de la bibliothèque Pheanstalk, les développeurs peuvent rapidement mettre en œuvre l'asynchronisation des tâches, la distribution des messages et le traitement en arrière-plan, optimisant ainsi les performances globales de l'architecture. Qu'il s'agisse de la collecte de journaux, de l'envoi d'e-mails, du traitement des commandes ou de la synchronisation des données, le mécanisme de file d'attente peut apporter une plus grande fiabilité et évolutivité au projet.