Maison cadre php Laravel Message Queuing dans Laravel : découplage du traitement des tâches asynchrones

Message Queuing dans Laravel : découplage du traitement des tâches asynchrones

Aug 26, 2023 pm 07:15 PM
消息队列 解耦 异步任务处理

Message Queuing dans Laravel : découplage du traitement des tâches asynchrones

Message Queuing dans Laravel : découplage du traitement des tâches asynchrones

Introduction :
Dans le développement Web, la gestion des tâches chronophages est un problème courant. L'approche traditionnelle consiste à effectuer des tâches directement pendant le traitement des requêtes Web, mais cette approche entraînera un ralentissement du temps de réponse de la requête et est sujette au problème de l'impossibilité de réessayer en cas d'échec de la tâche. Afin de résoudre ces problèmes, les files d'attente de messages peuvent être utilisées pour le traitement des tâches asynchrones. Le framework Laravel fournit des fonctions de file d'attente puissantes et faciles à utiliser. Cet article explique comment utiliser les files d'attente de messages dans Laravel pour découpler le traitement des tâches asynchrones.

1. Pourquoi utiliser la file d'attente des messages
L'utilisation de la file d'attente des messages présente les principaux avantages suivants :

  1. Traitement des tâches découplé : en plaçant les tâches dans la file d'attente des messages, le découplage des tâches peut être obtenu. Autrement dit, le déclenchement et l'exécution des tâches peuvent être gérés séparément. L'exécuteur de la tâche n'a besoin que de surveiller la file d'attente sans se soucier des détails du déclenchement de la tâche.
  2. Traitement asynchrone : Après avoir mis la tâche dans la file d'attente des messages, le temps de réponse de la requête web peut être plus rapide car l'exécution de la tâche ne bloquera pas le traitement de la requête web.
  3. Mécanisme de nouvelle tentative : les systèmes de file d'attente de messages fournissent généralement un mécanisme de nouvelle tentative en cas d'échec, qui peut automatiquement réessayer les tâches pour garantir que les tâches peuvent éventuellement être exécutées.

2. Configuration de base du système de file d'attente Laravel
Dans Laravel, l'utilisation de la fonction de file d'attente nécessite une configuration de base. Tout d'abord, vous devez configurer le pilote de file d'attente dans le fichier de configuration de Laravel. Vous pouvez choisir d'utiliser une base de données, Redis, etc. comme stockage de file d'attente. Ajoutez la configuration suivante au fichier .env : .env 文件中:

QUEUE_CONNECTION=database
Copier après la connexion

然后,在Laravel的数据库迁移文件中添加用于存储队列任务的数据表。可以使用以下命令生成迁移文件:

php artisan queue:table
Copier après la connexion

生成的迁移文件中会包含一个名为jobs的数据表。

接下来,运行迁移命令来创建数据表:

php artisan migrate
Copier après la connexion

三、定义队列任务
在Laravel中,队列任务是通过继承IlluminateContractsQueueShouldQueue接口并实现handle方法来定义的。下面是一个示例的队列任务定义:

<?php

namespace AppJobs;

use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;

class ProcessPodcast implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $podcast;

    public function __construct($podcast)
    {
        $this->podcast = $podcast;
    }

    public function handle()
    {
        // 处理耗时的任务
        // 例如,发送邮件、生成报表等
    }
}
Copier après la connexion

handle方法中编写具体的任务逻辑。其中,ShouldQueue接口和DispatchableInteractsWithQueueQueueableSerializesModels这几个特质是Laravel队列系统所需的。

四、触发任务
要触发一个队列任务,可以使用dispatch方法。下面是一个触发任务的示例代码:

<?php

use AppJobsProcessPodcast;
use IlluminateHttpRequest;

class PodcastController extends Controller
{
    public function store(Request $request)
    {
        // 处理其他的请求逻辑

        ProcessPodcast::dispatch($podcast)
            ->delay(now()->addMinutes(10));
    }
}
Copier après la connexion

这里,我们使用dispatch方法触发了一个ProcessPodcast任务,并可以设置任务的延迟执行时间。

五、任务的监听与执行
Laravel提供了queue:listen命令来监听并执行队列任务。可以在终端中运行以下命令来启动队列监听器:

php artisan queue:listen
Copier après la connexion

队列监听器将会不断地监听队列并执行任务。

六、重试机制
Laravel队列系统提供了对失败任务的重试机制。如果任务执行失败,队列监听器会自动将其重新放入队列,并根据配置的重试次数进行重试。可以在.env

QUEUE_TRIES=3
Copier après la connexion
Ensuite, ajoutez la table de données utilisée pour stocker les tâches de file d'attente dans le fichier de migration de base de données de Laravel. Vous pouvez utiliser la commande suivante pour générer un fichier de migration :

rrreee

Le fichier de migration généré contiendra une table de données nommée jobs.


Ensuite, exécutez la commande de migration pour créer la table de données :

rrreee🎜3. Définir les tâches de file d'attente🎜Dans Laravel, les tâches de file d'attente héritent de l'interface IlluminateContractsQueueShouldQueue et implémentent la méthode handle. à définir. Voici un exemple de définition de tâche de file d'attente : 🎜rrreee🎜Écrivez une logique de tâche spécifique dans la méthode handle. Parmi eux, l'interface ShouldQueue et les traits Dispatchable, InteractsWithQueue, Queueable, SerializesModels. sont requis par le système de file d'attente de Laravel. 🎜🎜4. Déclencher des tâches🎜Pour déclencher une tâche de file d'attente, vous pouvez utiliser la méthode dispatch. Voici un exemple de code pour déclencher une tâche : 🎜rrreee🎜Ici, nous utilisons la méthode dispatch pour déclencher une tâche ProcessPodcast, et pouvons définir le temps d'exécution différé du tâche. 🎜🎜5. Surveillance et exécution des tâches🎜Laravel fournit la commande queue:listen pour surveiller et exécuter les tâches en file d'attente. Vous pouvez exécuter la commande suivante dans le terminal pour démarrer l'écouteur de file d'attente : 🎜rrreee🎜L'écouteur de file d'attente écoutera en permanence la file d'attente et effectuera des tâches. 🎜🎜 6. Mécanisme de nouvelle tentative 🎜 Le système de file d'attente Laravel fournit un mécanisme de nouvelle tentative pour les tâches ayant échoué. Si l'exécution de la tâche échoue, l'écouteur de file d'attente la remettra automatiquement dans la file d'attente et réessayera en fonction du nombre de tentatives configuré. Le nombre de tentatives peut être configuré dans le fichier .env : 🎜rrreee🎜La configuration ici indique que la tâche sera réessayée jusqu'à 3 fois après un échec. 🎜🎜7. Résumé🎜En utilisant le système de file d'attente Laravel, nous pouvons facilement implémenter un traitement de tâches asynchrone. En plaçant les tâches dans la file d'attente des messages, le découplage des tâches, le traitement asynchrone et les nouvelles tentatives d'échec peuvent être obtenus, améliorant ainsi les performances et la fiabilité des applications Web. Ce qui précède est une introduction de base à l'utilisation des files d'attente de messages pour le traitement des tâches asynchrones dans Laravel. J'espère que cela vous sera utile. 🎜

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 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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Pratique de développement Java Websocket : comment implémenter la fonction de file d'attente de messages Pratique de développement Java Websocket : comment implémenter la fonction de file d'attente de messages Dec 02, 2023 pm 01:57 PM

Pratique de développement Java Websocket : Comment implémenter la fonction de file d'attente de messages Introduction : Avec le développement rapide d'Internet, la communication en temps réel devient de plus en plus importante. Dans de nombreuses applications Web, des mises à jour et des capacités de notification en temps réel sont requises via la messagerie en temps réel. JavaWebsocket est une technologie qui permet la communication en temps réel dans les applications Web. Cet article explique comment utiliser JavaWebsocket pour implémenter la fonction de file d'attente de messages et fournit des exemples de code spécifiques. Concepts de base de la file d'attente de messages

Développement Golang : créez une file d'attente de messages fiable à l'aide de NATS Développement Golang : créez une file d'attente de messages fiable à l'aide de NATS Sep 21, 2023 am 11:21 AM

Développement Golang : Utilisation de NATS pour créer une file d'attente de messages fiable, des exemples de code spécifiques sont nécessaires Introduction : Dans les systèmes distribués modernes, la file d'attente de messages est un composant important utilisé pour gérer la communication asynchrone, découpler les composants du système et assurer une livraison fiable des messages. Cet article explique comment utiliser le langage de programmation Golang et NATS (le nom complet est « High Performance Reliable Messaging System ») pour créer une file d'attente de messages efficace et fiable, et fournit des exemples de code spécifiques. Qu’est-ce que le NATS ? NATS est un système de messagerie léger et open source.

Comment gérer les transactions distribuées et les files d'attente de messages dans le développement C# Comment gérer les transactions distribuées et les files d'attente de messages dans le développement C# Oct 09, 2023 am 11:36 AM

Comment gérer les transactions distribuées et les files d'attente de messages dans le développement C# Introduction : Dans les systèmes distribués d'aujourd'hui, les transactions et les files d'attente de messages sont des composants très importants. Les transactions distribuées et les files d'attente de messages jouent un rôle crucial dans la gestion de la cohérence des données et du découplage du système. Cet article explique comment gérer les transactions distribuées et les files d'attente de messages dans le développement C#, et donne des exemples de code spécifiques. 1. Transactions distribuées Les transactions distribuées font référence à des transactions qui s'étendent sur plusieurs bases de données ou services. Dans les systèmes distribués, assurer la cohérence des données est devenu un défi majeur. Voici deux types de

La merveilleuse utilisation de Redis dans la file d'attente des messages La merveilleuse utilisation de Redis dans la file d'attente des messages Nov 07, 2023 pm 04:26 PM

L'utilisation merveilleuse de Redis dans les files d'attente de messages Les files d'attente de messages sont une architecture découplée courante utilisée pour transmettre des messages asynchrones entre applications. En envoyant un message dans une file d'attente, l'expéditeur peut continuer à effectuer d'autres tâches sans attendre une réponse du destinataire. Et le destinataire peut récupérer le message de la file d’attente et le traiter au moment opportun. Redis est une base de données en mémoire open source couramment utilisée, dotée de hautes performances et de capacités de stockage persistantes. Dans les files d'attente de messages, les multiples structures de données et les excellentes performances de Redis en font un choix idéal

Comment implémenter une file d'attente de messages à l'aide d'opérations de script Linux en Java Comment implémenter une file d'attente de messages à l'aide d'opérations de script Linux en Java Oct 05, 2023 am 08:09 AM

Comment utiliser les opérations de script Linux pour implémenter des files d'attente de messages en Java nécessite des exemples de code spécifiques. Les files d'attente de messages sont un mécanisme de communication courant utilisé pour transférer des données entre différents processus. En Java, nous pouvons implémenter des files d'attente de messages à l'aide d'opérations de script Linux afin de pouvoir facilement envoyer ou recevoir des messages depuis la file d'attente. Dans cet article, nous détaillerons comment implémenter des files d'attente de messages à l'aide de scripts Java et Linux, et fournirons des exemples de code spécifiques. Pour démarrer avec Java et Lin

Compréhension approfondie du mécanisme de mise en œuvre sous-jacent de la file d'attente de messages Kafka Compréhension approfondie du mécanisme de mise en œuvre sous-jacent de la file d'attente de messages Kafka Feb 01, 2024 am 08:15 AM

Présentation des principes d'implémentation sous-jacents de la file d'attente de messages Kafka Kafka est un système de file d'attente de messages distribué et évolutif qui peut gérer de grandes quantités de données et présente un débit élevé et une faible latence. Kafka a été initialement développé par LinkedIn et constitue désormais un projet de haut niveau de l'Apache Software Foundation. Architecture Kafka est un système distribué composé de plusieurs serveurs. Chaque serveur est appelé un nœud et chaque nœud est un processus indépendant. Les nœuds sont connectés via un réseau pour former un cluster. K

Comment implémenter une file d'attente de messages simple à l'aide de Redis et Golang Comment implémenter une file d'attente de messages simple à l'aide de Redis et Golang Aug 01, 2023 am 08:09 AM

Comment utiliser Redis et Golang pour implémenter une file d'attente de messages simple Introduction Les files d'attente de messages sont largement utilisées dans divers scénarios d'application, tels que le découplage des composants du système, l'écrêtage des pics et le remplissage des vallées, la communication asynchrone, etc. Cet article expliquera comment utiliser Redis et Golang pour implémenter une file d'attente de messages simple, aidant les lecteurs à comprendre les principes de base et les méthodes d'implémentation des files d'attente de messages. Introduction à Redis Redis est une base de données open source en mémoire écrite en langage C, qui fournit des fonctions de stockage et de traitement de paires clé-valeur pour d'autres structures de données couramment utilisées. Redis est connu pour ses hautes performances,

Comment gérer les problèmes de file d'attente de messages et de communication asynchrone dans le développement C# Comment gérer les problèmes de file d'attente de messages et de communication asynchrone dans le développement C# Oct 08, 2023 am 08:41 AM

Comment gérer les files d'attente de messages et les problèmes de communication asynchrone dans le développement C# Introduction : Dans le développement de logiciels modernes, à mesure que la taille et la complexité des applications continuent d'augmenter, il est très important de gérer efficacement les files d'attente de messages et de mettre en œuvre une communication asynchrone. Certains scénarios d'application courants incluent la transmission de messages entre des systèmes distribués, le traitement de la file d'attente des tâches en arrière-plan, la programmation basée sur les événements, etc. Cet article explique comment gérer les files d'attente de messages et les problèmes de communication asynchrone dans le développement C#, et fournit des exemples de code spécifiques. 1. File d'attente des messages La file d'attente des messages est un mécanisme de communication asynchrone qui permet d'envoyer des messages par

See all articles