Maison >cadre php >Laravel >Plusieurs façons d'annuler les tâches de file d'attente dans Laravel

Plusieurs façons d'annuler les tâches de file d'attente dans Laravel

PHPz
PHPzoriginal
2023-04-21 10:00:502197parcourir

Dans Laravel, Queue est un moyen efficace de gérer les tâches asynchrones. Grâce aux files d'attente, nous pouvons mettre certaines tâches fastidieuses en arrière-plan pour le traitement, améliorant ainsi les performances et la stabilité du système. Cependant, dans le développement réel, nous devons parfois annuler des tâches dans la file d'attente. Cet article présentera plusieurs méthodes et précautions pour annuler les tâches de file d'attente dans Laravel.

Comment annuler les tâches de la file d'attente

  1. Supprimer les tâches dans la file d'attente
    Nous pouvons obtenir l'effet d'annulation des tâches en supprimant manuellement les tâches de la file d'attente dans la console ou le code.

Dans la console, nous pouvons utiliser la commande suivante :

php artisan queue:failed
php artisan queue:forget {id}

Parmi elles, la commande queue:failed listera toutes les tâches ayant échoué, y compris leurs identifiants et Raison de l'échec. La commande queue:forget peut annuler la tâche spécifiée en fonction de l'identifiant donné. Cependant, cette approche ne fonctionne que pour les tâches ayant échoué dans la file d'attente.

Dans le code, nous pouvons utiliser la méthode deleteFailedJob de Queue pour supprimer les tâches ayant échoué, ou utiliser la commande DEL de Redis pour supprimer les tâches en cours d'exécution.

  1. Lancer une exception
    Dans Laravel, nous pouvons annuler l'exécution de la tâche en lançant une exception. Lorsque le processeur de file d'attente rencontre une exception lors de l'exécution d'une tâche, il marque automatiquement la tâche comme tâche ayant échoué et enregistre les informations d'erreur dans le journal de file d'attente. Pour que l'exception soit interceptée par le gestionnaire, nous devons envelopper un bloc try-catch dans la tâche. Voici un exemple simple :

namespace AppJobs;

utilisez Exception;
utilisez IlluminateBusQueueable;
utilisez IlluminateContractsQueueShouldQueue;
utilisez IlluminateFoundationBusDispatchable;
utilisez IlluminateQueueInteractsWith Queue;
utilisez Il luminateQueueSerializesModels ;

class MyJob implémente ShouldQueue
{

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

public function handle()
{
    try {
        // 任务执行代码
    } catch (Exception $e) {
        // 抛出异常,取消任务
        throw new Exception('任务已取消');
    }
}

}

  1. Utilisation du mécanisme de délai d'attente
    Dans Laravel, nous pouvons définir le délai d'attente pour les tâches en file d'attente. Si une tâche n'est pas terminée dans le délai spécifié, le processeur la marque automatiquement comme tâche ayant échoué. Nous pouvons utiliser ce mécanisme pour annuler la tâche en cours d'exécution. Voici un exemple simple :

namespace AppJobs;

utilisez IlluminateBusQueueable;
utilisez IlluminateContractsQueueShouldQueue;
utilisez IlluminateFoundationBusDispatchable;
utilisez IlluminateQueueInteractsWithQueue;
utilisez IlluminateQueueSerializes Modèles ;

class MyJob implémente ShouldQueue
{

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

public $timeout = 10; // 设置超时时间为 10 秒

public function handle()
{
    // 任务执行代码
}

}

Notes

  1. Soyez prudent lorsque vous utilisez des tâches retardées. Vous ne pouvez pas simplement utiliser la méthode de suppression de Queue pour supprimer des tâches. Étant donné que l'ID de la tâche retardée est généré en fonction de l'horodatage, lorsque vous supprimez la tâche puis ajoutez une nouvelle opération retardée à la même tâche, l'ID change, ce qui équivaut à l'ajout d'une nouvelle tâche.
  2. Toutes les tâches doivent définir un délai d'attente, sinon cela pourrait entraîner des problèmes de performances car le temps d'exécution de la tâche est trop long.
  3. Lorsqu'une exception est levée pour annuler une tâche, faites attention au contenu de l'exception pour éviter toute fuite d'informations excessives lorsqu'une erreur se produit dans le processeur de tâches.
  4. Lors de l'annulation d'une tâche de file d'attente à l'aide de l'une des méthodes ci-dessus, le journal des événements doit être enregistré dans l'événement d'annulation pour une maintenance et un débogage futurs.

Cet article présente plusieurs méthodes et précautions pour annuler les tâches de file d'attente dans Laravel. Lorsque nous ne voulons pas qu'une tâche soit exécutée, nous pouvons utiliser la méthode ci-dessus pour l'annuler. Dans le même temps, nous devons choisir une méthode appropriée pour annuler les tâches en fonction des besoins et des conditions réels afin de garantir la stabilité et les performances du système.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn