Files d'attente de tâches en PHP : guide complet pour débutants

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

Introduction aux files d'attente de tâches en PHP

\n\n

Dans le développement web moderne, il arrive souvent de devoir effectuer des opérations longues ou gourmandes en ressources sans faire attendre l'utilisateur. Par exemple : l'envoi de campagnes d'emails, la génération de rapports PDF, le traitement d'images ou l'intégration avec des API externes. C'est là que les files d'attente de tâches (job queues) entrent en jeu — l'un des outils clés du développeur backend.

\n\n

Une file d'attente de tâches est un mécanisme qui permet de reporter l'exécution d'une opération gourmande en ressources en arrière-plan, libérant ainsi le thread principal de l'application pour traiter de nouvelles requêtes. Dans cet article, nous allons détailler comment travailler avec les files d'attente de tâches en PHP, en commençant par les concepts de base et en terminant par des exemples pratiques.

\n\n

Qu'est-ce qu'une file d'attente de tâches et pourquoi en a-t-on besoin ?

\n\n

Imaginez que votre site doive envoyer 1000 emails après l'inscription d'un utilisateur. Si vous le faites de manière synchrone, la page mettra plusieurs minutes à se charger. L'utilisateur partira et le serveur sera bloqué. La file d'attente résout ce problème : la tâche d'envoi des emails est placée dans une file d'attente et traitée par un worker en arrière-plan, tandis que l'utilisateur reçoit une réponse instantanément.

\n\n

Principaux avantages de l'utilisation des files d'attente

\n
    \n
  • Amélioration de l'UX — l'utilisateur n'attend pas la fin des opérations longues
  • \n
  • Augmentation des performances — le serveur traite les requêtes plus rapidement
  • \n
  • Passage à l'échelle — vous pouvez ajouter des workers supplémentaires pour traiter la file d'attente
  • \n
  • Tolérance aux pannes — en cas d'échec, les tâches peuvent être remises dans la file d'attente
  • \n
  • Planification — exécution des tâches à un moment précis
  • \n
\n\n

Architecture des files d'attente de tâches en PHP

\n\n

Un système de files d'attente typique se compose de trois composants :

\n
    \n
  • Producteur (Producer) — la partie du code qui ajoute des tâches à la file d'attente
  • \n
  • File d'attente (Queue) — le stockage des tâches (souvent basé sur Redis, Beanstalkd ou une base de données)
  • \n
  • Worker — un script qui écoute constamment la file d'attente et exécute les tâches
  • \n
\n\n

En PHP, pour travailler avec les files d'attente, on utilise le plus souvent les bibliothèques php-resque, Laravel Queue (si vous travaillez avec Laravel) ou enqueue/fs. Nous allons aborder une approche générale qui peut être adaptée à n'importe quel framework.

\n\n

Exemple pratique : création d'une file d'attente de tâches en PHP pur

\n\n

Créons un système de files d'attente simple utilisant Redis. Installez Redis et l'extension phpredis ou utilisez predis/predis via Composer.

\n\n

Étape 1 : Préparation de l'environnement

\n
composer require predis/predis
\n\n

Étape 2 : Création du producteur

\n

Le producteur ajoutera des tâches à la file d'attente. Créons le fichier producer.php :

\n
<?php\nrequire 'vendor/autoload.php';\n\nuse Predis\\Client as RedisClient;\n\nclass JobProducer {\n    private $redis;\n    \n    public function __construct() {\n        $this->redis = new RedisClient([\n            'scheme' => 'tcp',\n            'host'   => '127.0.0.1',\n            'port'   => 6379,\n        ]);\n    }\n    \n    public function addJob(string $queueName, array $jobData): void {\n        $job = json_encode([\n            'id' => uniqid(),\n            'data' => $jobData,\n            'created_at' => time()\n        ]);\n        \n        // Utilisation de RPUSH pour ajouter à la fin de la file d'attente\n        $this->redis->rpush("queue:{$queueName}", $job);\n        echo "Tâche ajoutée à la file d'attente {$queueName}\\n";\n    }\n}\n\n// Exemple d'utilisation\n$producer = new JobProducer();\n$producer->addJob('emails', [\n    'to' => 'user@example.com',\n    'subject' => 'Bienvenue !',\n    'body' => 'Merci pour votre inscription...'\n]);\n?>
\n\n

Étape 3 : Création du worker

\n

Le worker

Blogs

Book Recommendations