Fermer

octobre 10, 2022

Opérations de file d’attente – Élément de processus manuel ou périodique

Opérations de file d’attente – Élément de processus manuel ou périodique


La file d’attente Drupal est essentiellement destinée à tous les processus de longue durée ou à toute tâche chronophage qui prend trop de temps, donc ici le noyau Drupal donne l’un des meilleurs plugins de file d’attente pour ajouter des éléments dans la file d’attente et traiter tous les éléments plus tard derrière la demande d’exécution plutôt que de prendre du temps lors du chargement de la page.

La tâche de longue durée peut être :

  • Mise à l’échelle des images
  • Envoi d’e-mails en masse
  • Indexation de la recherche
  • Un grand niveau de logique
  • Les événements de toute entité à synchroniser avec un tiers.

Nous pouvons ajouter des éléments dans une file d’attente sur n’importe quel événement, puis traiter tous les éléments un par un à partir de la file d’attente et les exécuter dans l’ordre FIFO.

Ici, je vais vous montrer comment créer un élément, puis traiter tous les éléments à la fois par l’API manuelle et cron, mais avant tout, nous devons d’abord créer un plugin et ajouter toutes les informations de la file d’attente dans l’annotation :

Création d’un plug-in QueueWorker

File d'attente

Comme vous l’avez vu, il y a un fichier UserSyncEventProcessor.php dans le fichier \src\Plugin\QueueWorker, et a ajouté l’annotation pour enregistrer le nouveau plugin avec l’id du plugin QueueWorker.

/**
* A User Sync Queue Publisher that process the queue.
*
* @QueueWorker(
*   id = "user_sync_queue_processor",
*   title = "User Sync Queue Processor"
*   cron = {"time" = 60}
* )
*/

We have added the QueueWorkerBase class in the new UserSyncQueueProcessor.php

/**
* Provides base functionality for the user sync queue Workers.
*/
class UserSyncQueueProcessor extends QueueWorkerBase implements ContainerFactoryPluginInterface {

Ce QueueWorker jouera le rôle principal pour traiter tous les éléments de la file d’attente et supprimer si le traitement réussit.

Tous les processus s’exécutent dans la méthode processItem() de QueueWorkerInterface comme dans la capture d’écran.

/**
* {@inheritdoc}
*/
fonction publique processItem($data) {

C’est tout pour l’enregistrement de notre plugin QueueWorker.

Ajout d’un élément de file d’attente :

Maintenant, nous pouvons enregistrer notre élément de file d’attente en utilisant le code ci-dessous lors de la sauvegarde de l’entité ou lors de tout événement Drupal.

Nous transmettons des données factices $ qui peuvent être modifiées selon les exigences du projet et seront disponibles dans la méthode processItem.

Nous pouvons confirmer tous les éléments de notre table de file d’attente dans la base de données, et toutes les données sérialisées sont nos $data.

Trouvez plus de méthodes DatabaseQueue disponibles dans le fichier /core/lib/Drupal/Core/Queue/DatabaseQueue.php.

Traiter l’élément par cron :

hook_cron : exécutez cette commande « drush cron » depuis le terminal ou exécutez-la depuis la page cron du système depuis la page /admin/config/system/cron, puis elle traitera puis supprimera tous les éléments de la file d’attente dans l’ordre FIFO.

Traiter l’article par manuel :

En fait, le drush a déjà écrit une commande queue:run bien gérée dans /vendor/drush/drush/src/Drupal/Commands/core/QueueCommands.php

file d’attente drush:exécuter user_sync_queue_processor

Nous pouvons manipuler ce code selon nos besoins, comme ajouter plus de validation, de gestion des erreurs ou de débogage à différents moments, et exécuter ce code lors d’événements ou d’approbations spécifiques.

C’est ça.

TROUVÉ CELA UTILE ? PARTAGEZ-LE




Source link