{"componentChunkName":"component---src-templates-post-jsx","path":"/fr/queue-api","result":{"data":{"markdownRemark":{"html":"<h1>Queue API : Gestion Efficace des Tâches Asynchrones</h1>\n<p>Dans le monde numérique d'aujourd'hui, les applications web doivent souvent effectuer des tâches longues ou intensives en arrière-plan, telles que le traitement de gros volumes de données, l'envoi d'e-mails en masse, ou la mise à jour régulière de contenu. Pour gérer ces tâches de manière efficace et sans impacter les performances du site web, Drupal propose l'API de File d'Attente (Queue API). Dans cet article, nous allons explorer en détail ce qu'est l'API de File d'Attente dans Drupal, comment elle fonctionne et comment elle peut être utilisée pour améliorer les performances et la fiabilité des sites Drupal.</p>\n<h2>Qu'est-ce que l'API de File d'Attente dans Drupal ?</h2>\n<p>L'API de File d'Attente est un mécanisme intégré à Drupal qui permet de différer l'exécution de certaines tâches afin de les traiter de manière asynchrone, en dehors du flux principal de traitement des requêtes HTTP. Plutôt que d'exécuter immédiatement une tâche lourde ou intensive lorsqu'elle est déclenchée, Drupal ajoute cette tâche à une file d'attente, où elle sera traitée ultérieurement par un processus séparé ou parallèle.</p>\n<h2>Fonctionnement de la Queue API</h2>\n<p>L'API de File d'Attente utilise un système de \"workers\" (travailleurs) pour traiter les éléments de la file d'attente. Ces workers peuvent être des processus séparés s'exécutant en arrière-plan, des tâches planifiées exécutées par le système de cron de Drupal, ou même des workers externes intégrés à d'autres systèmes ou services. Lorsqu'un worker traite un élément de la file d'attente, il effectue la tâche associée et supprime cet élément de la file.</p>\n<h2>Avantages de la Queue API</h2>\n<p>L'API de File d'Attente offre plusieurs avantages importants pour le développement et l'exploitation des sites Drupal :</p>\n<h3>1. Performance Améliorée :</h3>\n<p>En déplaçant les tâches lourdes ou longues dans une file d'attente, Drupal peut continuer à répondre rapidement aux requêtes des utilisateurs sans être ralenti par le traitement de ces tâches.</p>\n<h3>2. Fiabilité et Tolérance aux Pannes :</h3>\n<p>En traitant les tâches de manière asynchrone, Drupal devient plus résilient aux pannes et aux surcharges. Même en cas d'erreurs ou de dysfonctionnements, les tâches restent dans la file d'attente et peuvent être reprises ultérieurement.</p>\n<h3>3. Extensibilité :</h3>\n<p>La Queue API est conçue pour être extensible et personnalisable, permettant aux développeurs d'ajouter des workers personnalisés pour traiter des types de tâches spécifiques ou d'intégrer des services externes pour le traitement des files d'attente.</p>\n<h2>Utilisation de l'API de File d'Attente</h2>\n<p>Voici un exemple simple de la manière dont vous pourriez utiliser l'API de file d'attente (Queue API) dans Drupal pour ajouter des éléments à une file d'attente et les traiter à l'aide d'un worker personnalisé :</p>\n<p>Supposons que nous voulions créer une file d'attente pour gérer l'envoi d'e-mails en arrière-plan dans Drupal. Voici comment nous pourrions le faire :</p>\n<ul>\n<li>Définissez une file d'attente personnalisée dans votre module :</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\"><span class=\"token keyword\">use</span> <span class=\"token package\">Drupal<span class=\"token punctuation\">\\</span>Core<span class=\"token punctuation\">\\</span>Queue<span class=\"token punctuation\">\\</span>QueueInterface</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">use</span> <span class=\"token package\">Drupal<span class=\"token punctuation\">\\</span>Core<span class=\"token punctuation\">\\</span>Queue<span class=\"token punctuation\">\\</span>QueueWorkerBase</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">/**\n * Implements hook_queue_info().\n */</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">my_module_queue_info</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token variable\">$queues</span><span class=\"token punctuation\">[</span><span class=\"token single-quoted-string string\">'my_module_email_queue'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">array</span><span class=\"token punctuation\">(</span>\n    <span class=\"token single-quoted-string string\">'title'</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span> <span class=\"token function\">t</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'Email queue for My Module'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token single-quoted-string string\">'worker callback'</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span> <span class=\"token single-quoted-string string\">'my_module_process_email_queue'</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> <span class=\"token variable\">$queues</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">/**\n * Worker callback function to process email queue items.\n */</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">my_module_process_email_queue</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$data</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// Process email data here (send email, update database, etc.).</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<ul>\n<li>Ajoutez des éléments à la file d'attente à l'endroit approprié de votre code :</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\"><span class=\"token keyword\">use</span> <span class=\"token package\">Drupal<span class=\"token punctuation\">\\</span>Core<span class=\"token punctuation\">\\</span>Queue<span class=\"token punctuation\">\\</span>QueueFactory</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Récupère le service de la file d'attente.</span>\n<span class=\"token variable\">$queue</span> <span class=\"token operator\">=</span> \\<span class=\"token package\">Drupal</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">service</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'queue'</span><span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'my_module_email_queue'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Ajoute un élément à la file d'attente.</span>\n<span class=\"token variable\">$queue</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">createItem</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$email_data</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>Assurez-vous de démarrer les workers pour traiter les éléments de la file d'attente, Vous pouvez le faire en exécutant la commande Drush suivante :</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">drush queue:run my_module_email_queue</code></pre></div>\n<ul>\n<li>Voici la commande qui permet de lister les différentes queues disponible :</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">drush queue:list</code></pre></div>\n<h2>Conclusion</h2>\n<p>La Queue API est un outil puissant pour gérer efficacement les tâches asynchrones dans Drupal, permettant aux sites web de répondre aux besoins de traitement intensif de manière fiable et performante. En déplaçant les tâches lourdes dans une file d'attente, Drupal peut offrir une meilleure expérience utilisateur tout en améliorant sa tolérance aux pannes et sa scalabilité. Que ce soit pour des opérations ponctuelles ou des workflows complexes, la Queue API offre une solution flexible et robuste pour les développeurs Drupal.</p>","excerpt":"Queue API : Gestion Efficace des Tâches Asynchrones Dans le monde numérique d'aujourd'hui, les applications web doivent souvent effectuer des tâches longues ou…","frontmatter":{"date":"2022-10-11","metaDate":"2022-10-11","title":"Queue API","tags":["Drupal 9","Drupal 10","backend","Module development"],"path":"/queue-api","cover":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAHABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAED/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAME/9oADAMBAAIQAxAAAAHSGqUB/8QAGBAAAgMAAAAAAAAAAAAAAAAAAQIAESH/2gAIAQEAAQUCm0ykn//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABYQAAMAAAAAAAAAAAAAAAAAAAAQMf/aAAgBAQAGPwJU/8QAGRABAAIDAAAAAAAAAAAAAAAAAQARITFR/9oACAEBAAE/IWxN5e6lYDkvIJ//2gAMAwEAAgADAAAAEIw//8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQMBAT8QV//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABkQAQADAQEAAAAAAAAAAAAAAAEAESFhcf/aAAgBAQABPxBDWg/CogLFqa92JiBDKn//2Q==","aspectRatio":2.995319812792512,"src":"/static/568b9a02f30f1dce6d5e0618a697a9c9/88110/picture.jpg","srcSet":"/static/568b9a02f30f1dce6d5e0618a697a9c9/0b320/picture.jpg 480w,\n/static/568b9a02f30f1dce6d5e0618a697a9c9/60b32/picture.jpg 960w,\n/static/568b9a02f30f1dce6d5e0618a697a9c9/88110/picture.jpg 1920w","srcWebp":"/static/568b9a02f30f1dce6d5e0618a697a9c9/d1a9d/picture.webp","srcSetWebp":"/static/568b9a02f30f1dce6d5e0618a697a9c9/bc3bf/picture.webp 480w,\n/static/568b9a02f30f1dce6d5e0618a697a9c9/39337/picture.webp 960w,\n/static/568b9a02f30f1dce6d5e0618a697a9c9/d1a9d/picture.webp 1920w","sizes":"(max-width: 1920px) 100vw, 1920px"},"resize":{"src":"/static/568b9a02f30f1dce6d5e0618a697a9c9/c4f3a/picture.jpg"}}}}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"pathSlug":"/queue-api","locale":"fr","prev":{"fields":{"locale":"fr"},"frontmatter":{"path":"/middleware-api","title":"Middleware API","tags":["Drupal 9","Core feature","Performance","Module development"]}},"next":{"fields":{"locale":"fr"},"frontmatter":{"path":"/single-directory-component","title":"Drupal Single Directory Component (SDC)","tags":["Drupal 10","Drupal 11","News","UX","UI","Theming"]}}}}}