Maison > cadre php > Laravel > le corps du texte

Parlons de la façon de consommer les tâches de file d'attente dans Laravel

PHPz
Libérer: 2023-04-14 17:15:46
original
1031 Les gens l'ont consulté

Dans Laravel, les files d'attente sont un outil important pour le traitement asynchrone. Lors du traitement de tâches asynchrones, les files d'attente nous permettent d'utiliser les ressources du serveur de manière plus flexible et d'améliorer l'évolutivité et les performances des applications. Lorsque nous plaçons une tâche fastidieuse dans la file d'attente, l'application continuera à s'exécuter de manière asynchrone et le travail en arrière-plan sera traité par la file d'attente. Lorsqu'il y a des tâches dans la file d'attente qui doivent être traitées, nous devons consommer les tâches de la file d'attente. Cet article vous expliquera comment consommer la file d'attente Laravel.

1. Configuration de la file d'attente

Avant d'utiliser la fonction de file d'attente de Laravel, nous devons configurer la file d'attente dans le fichier de configuration .env : .env配置文件中进行如下参数配置:

QUEUE_CONNECTION=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
Copier après la connexion

我们可以根据自己的需求进行配置,如果不需要密码可以将REDIS_PASSWORD设置为null。在本文中,我们使用Redis作为Laravel队列的驱动器。

二、创建队列任务

在Laravel中,我们可以使用如下命令创建一个队列任务:

php artisan make:job MyJob
Copier après la connexion

创建完毕后,在app/Jobs目录下将会生成一个名为MyJob的PHP文件,只需要在其中增加我们想要完成的任务代码即可。

三、推入队列任务

当我们完成队列任务的编写后,我们需要将其推入队列中。Laravel提供了多种方法将任务推入队列,以下是两种常用方法:

  1. 使用queue()方法
$this->dispatch(new MyJob($data));
Copier après la connexion
  1. 使用dispatch()方法
MyJob::dispatch($data);
Copier après la connexion

以上两种方法的参数都是MyJob类的实例,$data是传入任务的数据,可以是一个数组或对象。

四、消费队列任务

当我们推入了任务后,需要消费队列中的任务。Laravel提供了多种方式让我们去消费队列任务,比如:

  1. 使用php artisan queue:work命令

该命令可以在终端窗口中开启队列工作进程,用于监控队列中是否有任务需要处理。

php artisan queue:work --queue=queue-name --tries=3
Copier après la connexion

其中,queue-name是队列名称,tries是错误尝试次数,即当一个任务失败后,会让处理任务的进程进行多次重试。同时,在开启队列工作的进程中,我们也可以指定队列中的任务执行方式。

  1. 使用php artisan queue:listen命令

该命令也是用于监控队列任务的,与php artisan queue:work命令的区别是,它可以同时监控多个队列名称,并对队列任务进行分组。

  1. 使用supervisor守护进程

使用supervisor可以让我们在后台持续监控队列任务,防止队列工作进程意外终止。

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
user=root
numprocs=8
redirect_stderr=true
stdout_logfile=/path/to/worker.log
Copier après la connexion

以上是使用supervisor的一段示例代码,其中numprocs=8rrreee

Nous pouvons la configurer selon la nôtre. La configuration est requise Si un mot de passe n'est pas requis, REDIS_PASSWORD peut être défini sur null. Dans cet article, nous utilisons Redis comme pilote pour les files d'attente Laravel.

2. Créer une tâche de file d'attente

Dans Laravel, nous pouvons utiliser la commande suivante pour créer une tâche de file d'attente : 🎜rrreee🎜Après la création, un fichier nommé app/Jobs répertoire.code>MyJob, il suffit d'ajouter le code de la tâche que nous voulons accomplir. 🎜🎜3. Pousser la tâche de file d'attente 🎜🎜Après avoir fini d'écrire la tâche de file d'attente, nous devons la placer dans la file d'attente. Laravel fournit une variété de méthodes pour placer les tâches dans la file d'attente. Voici deux méthodes courantes : 🎜
  1. Utilisez la méthode queue()
rrreee<. ol start="2">
  • Utilisez la méthode dispatch()
  • rrreee🎜Les paramètres des deux méthodes ci-dessus sont des instances de MyJob code> classe. <code>$data sont les données transmises à la tâche, qui peuvent être un tableau ou un objet. 🎜🎜4. Consommer les tâches de la file d'attente🎜🎜Après avoir poussé la tâche, nous devons consommer les tâches dans la file d'attente. Laravel fournit diverses façons d'utiliser les tâches de file d'attente, telles que : 🎜
    1. Utilisez la commande php artisan queue:work
    🎜Cette commande peut être utilisé dans le terminal Ouvrez le processus de travail de la file d'attente dans la fenêtre pour surveiller s'il y a des tâches dans la file d'attente qui doivent être traitées. 🎜rrreee🎜 Parmi eux, queue-name est le nom de la file d'attente, tries est le nombre de tentatives d'erreur, c'est-à-dire que lorsqu'une tâche échoue, le processus qui gère la tâche sera réessayé plusieurs fois. Dans le même temps, lors du démarrage du travail en file d'attente, nous pouvons également spécifier la méthode d'exécution des tâches dans la file d'attente. 🎜
    1. Utilisez la commande php artisan queue:listen
    🎜Cette commande est également utilisée pour surveiller les tâches de file d'attente, et est la même as php La différence entre la commande artisan queue:work est qu'elle peut surveiller plusieurs noms de file d'attente en même temps et regrouper les tâches de file d'attente. 🎜
    1. Utiliser le démon supervisor
    🎜L'utilisation de supervisor nous permet de surveiller en permanence les tâches de file d'attente en arrière-plan , pour empêcher le processus de traitement de file d'attente de se terminer de manière inattendue. 🎜rrreee🎜Ce qui précède est un exemple de code utilisant supervisor, où numprocs=8 spécifie le nombre de processus de travail de file d'attente à ouvrir. 🎜🎜5. Résumé🎜🎜Ce qui précède explique comment consommer la file d'attente Laravel En fonction de vos propres besoins et de votre situation réelle, vous pouvez choisir d'utiliser les méthodes mentionnées ci-dessus pour consommer et traiter les tâches de file d'attente. le savez très bien, vous pouvez vous référer à la documentation officielle pour apprendre. 🎜

    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!

    source:php.cn
    Déclaration de ce site Web
    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
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal