Files d'attente de tâches pour PHP : RabbitMQ, Beanstalkd et Gearman

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Files d'attente de tâches pour PHP : RabbitMQ, Beanstalkd et Gearman



Dans les applications web modernes, il est souvent nécessaire d'effectuer des opérations longues ou gourmandes en ressources de manière asynchrone, sans obliger l'utilisateur à attendre une réponse. Exemples typiques : envoi de campagnes email, génération de rapports, traitement d'images, interaction avec des API externes. Pour résoudre ces problèmes en PHP, on utilise des files d'attente de tâches (job queues). Elles permettent de séparer la logique de la requête du traitement en arrière-plan, améliorant ainsi la réactivité de l'interface et la scalabilité du système.



Dans cet article, nous examinerons en détail trois outils populaires pour organiser des files d'attente en PHP : RabbitMQ, Beanstalkd et Gearman. Vous découvrirez leurs caractéristiques, leur architecture, des exemples d'utilisation et apprendrez à choisir la solution adaptée à votre projet.



1. RabbitMQ



RabbitMQ est un puissant courtier de messages implémentant le protocole AMQP (Advanced Message Queuing Protocol). Il prend en charge des scénarios de routage complexes, des échangeurs (exchanges), des files d'attente avec priorités, des accusés de réception et bien plus encore. RabbitMQ est idéal pour les architectures de microservices et les systèmes nécessitant une livraison fiable des messages.



Installation et connexion

Pour travailler avec RabbitMQ en PHP, on utilise la bibliothèque php-amqplib. Installation via Composer :

composer require php-amqplib/php-amqplib


Exemple : envoi d'une notification par email

Créons un producteur (expéditeur) et un consommateur (processeur) pour l'envoi en arrière-plan d'emails.



Fichier producer.php :

<?phprequire_once 'vendor/autoload.php';

use PhpAmqpLib\\Connection\\AMQPStreamConnection;use PhpAmqpLib\\Message\\AMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');$channel = $connection->channel();

$channel->queue_declare('email_queue', false, true, false, false);

$data = json_encode([ 'email' => 'user@example.com', 'subject' => 'Bienvenue !', 'body' => 'Merci pour votre inscription.']);

$msg = new AMQPMessage($data, [ 'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);

$channel->basic_publish($msg, '', 'email_queue');

echo " [x] Message envoyé";

$channel->close();$connection->close();


Fichier consumer.php :

<?phprequire_once 'vendor/autoload.php';

use PhpAmqpLib\\Connection\\AMQPStreamConnection;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');$channel = $connection->channel();

$channel->queue_declare('email_queue', false, true, false, false);

echo " [*] En attente de messages. Pour quitter, appuyez sur CTRL+C";

$callback = function ($msg) { $data = json_decode($msg->body, true); // Simulation d'envoi d'email sleep(2); echo " [x] Email envoyé à {$data['email']}"; $msg->ack();};

$channel->basic_qos(null, 1, null);$channel->basic_consume('email_queue', '', false, false, false, false, $callback);

while ($channel->is_consuming()) { $channel->wait();}

$channel->close();$connection->close();


2. Beanstalkd



Beanstalkd est un gestionnaire de files d'attente léger, rapide et simple d'utilisation. Il fonctionne selon un protocole similaire à memcached et convient parfaitement aux tâches ne nécessitant pas de routage complexe. Beanstalkd prend en charge les priorités, les délais (delay) et le time-to-run (TTR).



Installation

Pour PHP, il existe le client pda/pheanstalk :

composer require pda/pheanstalk


Exemple : traitement d'images

Supposons que nous devions créer des miniatures pour les images téléchargées.



Fichier producer.php :

<?phprequire_once 'v                    

Recommendations