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

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, Gearman et Redis



Dans les applications web modernes en PHP, il est souvent nécessaire d'effectuer des opérations longues ou gourmandes en ressources sans bloquer le flux principal de l'utilisateur. L'envoi de campagnes email, la génération de rapports, le traitement d'images, le travail avec des vidéos — toutes ces tâches sont mieux exécutées de manière asynchrone, en arrière-plan. Pour cela, il existe des files d'attente de tâches (job queues) — des mécanismes qui permettent de différer l'exécution d'une tâche et de la traiter plus tard à l'aide de workers.



Dans cet article, nous examinerons trois outils populaires pour organiser des files d'attente de tâches en PHP : RabbitMQ, Gearman et Redis. Vous apprendrez dans quels cas les utiliser et verrez des exemples de code.



Pourquoi des files d'attente de tâches ?



Les principaux avantages de l'utilisation de files d'attente :



  • Asynchronisme — l'utilisateur n'attend pas la fin d'une opération lourde.
  • Mise à l'échelle — vous pouvez lancer plusieurs workers pour un traitement parallèle.
  • Tolérance aux pannes — si un worker tombe, la tâche reste dans la file d'attente et sera traitée plus tard.
  • Séparation des responsabilités — le code d'envoi de la tâche et le code de son traitement sont faiblement couplés.


1. RabbitMQ — un puissant courtier de messages



RabbitMQ est un courtier de messages complet prenant en charge le protocole AMQP. Il assure une livraison garantie, le routage, les accusés de réception et bien plus encore. Il convient aux systèmes complexes à forte charge.



Pour travailler avec RabbitMQ en PHP, on utilise l'extension php-amqplib.



Installation

composer require php-amqplib/php-amqplib


Exemple : envoi d'une tâche

<?phprequire_once __DIR__ . '/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' => 'Bonjour !']);$msg = new AMQPMessage($data, ['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);

$channel->basic_publish($msg, '', 'email_queue');echo "Tâche envoyée dans la file d'attente";

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


Exemple : worker (gestionnaire)

<?phprequire_once __DIR__ . '/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);

$callback = function ($msg) { $data = json_decode($msg->body, true); echo "Envoi d'un email à {$data['email']} avec le sujet '{$data['subject']}'"; // Ici, l'envoi réel de l'email $msg->ack(); // Accusé de réception du traitement};

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

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


2. Gearman — système de tâches distribué



Gearman est spécialisé dans le traitement distribué des tâches. Il permet d'appeler des fonctions sur des serveurs distants ou en arrière-plan. Il est parfaitement adapté à une architecture de microservices.



Pour PHP, il existe l'extension gearman (PECL).



Installation

sudo apt install gearman-job-serverpecl install gearman


Exemple : client (envoi d'une tâche)

<?php$client = new GearmanClient();$client->addServer('127.0.0.1', 4730);

$result = $client->doBackground('send_email', json_encode([ 'email' => 'user@example.com', 'subject' => 'Bonjour !']));

echo "Tâche envoyée

Recommendations