recherche
Maisoncadre phpLaravelIntroduction à l'utilisation des files d'attente dans le framework laravel (avec code)

Cet article vous apporte une introduction à l'utilisation des files d'attente dans le framework laravel (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Dans le développement de projets réels, nous rencontrons souvent des situations qui nécessitent des files d'attente légères, comme l'envoi de messages texte, l'envoi d'e-mails, etc. Ces tâches ne suffisent pas pour utiliser des files d'attente de messages lourdes telles que kafka et RabbitMQ, mais Et ça nécessite des fonctions telles que le contrôle asynchrone, de nouvelle tentative et de concurrence. De manière générale, nous utilisons souvent Redis, Beanstalk et Amazon SQS pour implémenter les fonctions associées. Laravel fournit une API unifiée pour différents services de file d'attente en arrière-plan. Cet article présentera la file d'attente Redis la plus largement utilisée.

Avant d'expliquer le service de file d'attente de Laravel, nous devons d'abord parler du service de file d'attente basé sur Redis. Tout d'abord, Redis est conçu pour la mise en cache, mais en raison de certaines de ses propres caractéristiques, il peut être utilisé pour les files d'attente de messages

Structure des données de la file d'attente Redis

Liste liste chaînée

Les fonctionnalités de file d'attente de messages de Redis telles que FIFO (premier entré, premier sorti) sont faciles à implémenter. Vous n'avez besoin que d'un objet de liste pour récupérer les données du début et remplir les données de la fin.

Commandes associées : (1) Entrée gauche et sortie droite : lpush/rpop ; (2) Entrée droite et sortie gauche : rpush/lpop.

Cette file d'attente de messages simple est facile à mettre en œuvre.

Ensemble ordonné Zset

Certains scénarios de tâches ne nécessitent pas que la tâche soit exécutée immédiatement, mais doivent être retardées. Certaines tâches sont très importantes et doivent être réessayées lorsque la tâche échoue. Ces fonctions ne peuvent pas être accomplies uniquement en s'appuyant sur des listes. À l’heure actuelle, une collection ordonnée de Redis est nécessaire.

L'ensemble ordonné Redis est similaire à l'ensemble Redis, c'est une collection qui ne contient pas la même chaîne. La différence entre eux est que chaque membre de l’ensemble ordonné est associé à un score, qui est utilisé pour classer les membres de l’ensemble ordonné du score le plus bas au score le plus élevé.

En regardant uniquement l'ensemble ordonné et les tâches retardées, il n'y a pas de relation, mais vous pouvez définir le score de l'ensemble ordonné sur l'heure à laquelle la tâche retardée est démarrée, puis interroger l'ensemble ordonné pour récupérer le tâches expirées. Sortez pour le traitement, réalisant ainsi la fonction de retarder les tâches.

Pour les tâches importantes qui doivent être réessayées, avant que la tâche ne soit exécutée, la tâche sera placée dans une collection ordonnée et le temps d'exécution le plus long de la tâche sera défini. Si la tâche est exécutée avec succès, la tâche sera supprimée de la collection commandée. Si la tâche n'est pas terminée dans le délai imparti, les tâches de l'ensemble ordonné seront remises dans la file d'attente.

Commandes associées :

(1) ZADD Ajoute un ou plusieurs membres à un ensemble ordonné, ou met à jour son score s'il existe déjà.

(2) ZRANGEBYSCORE Renvoie un ensemble ordonné de plages de membres par score.

(3) ZREMRANGEBYRANK Supprime tous les membres d'un ensemble ordonné dans l'index donné.

Planification des tâches du service de file d'attente Laravel

Le processus de planification des tâches du service de file d'attente est le suivant :

Introduction à lutilisation des files dattente dans le framework laravel (avec code)

Le service de file d'attente de Laravel se compose de deux Il existe deux contrôles de processus, l'un est le producteur et l'autre est le consommateur. Ces deux processus manipulent trois files d'attente Redis, dont l'une est List, responsable des tâches immédiates, et deux Zsets, responsables des tâches retardées et des tâches en attente.

Le producteur est responsable de pousser les tâches vers redis. S'il s'agit d'une tâche immédiate, elle sera poussée vers queue:default par défaut ; retardé.

Le consommateur interroge deux files d'attente, retire continuellement des tâches de la file d'attente, place d'abord les tâches dans queue:default:reserved, puis exécute les tâches associées. Si la tâche est exécutée avec succès, la tâche dans queue:default:reserved sera supprimée, sinon elle sera remise dans la file d'attente queue:default:delayed.

Le processus global du service de file d'attente Laravel

Processus de distribution des tâches :

Introduction à lutilisation des files dattente dans le framework laravel (avec code)

Fonctionnement du processeur de tâches :

Introduction à lutilisation des files dattente dans le framework laravel (avec code)

Créer une tâche

Paramètres de file d'attente

'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => 'default',
        'retry_after' => 90,
    ],

Configurer dans config/queue.php
De manière générale, la configuration par défaut de Redis est comme ci-dessus. connection est le nom de connexion de redis dans la base de données ; queue est le nom de la file d'attente dans redis. Il convient de noter que si vous utilisez un cluster redis, vous devez utiliser la balise de hachage de clé, qui est {default}. ; lorsque la tâche est en cours d'exécution. Une fois le délai retry_after dépassé, la tâche sera remise dans la file d'attente.

Création d'une classe de tâches

La structure de la classe de tâches est très simple. De manière générale, elle ne contient qu'une méthode handle que la file d'attente utilise pour appeler cette tâche.

Si vous souhaitez que les tâches soient placées dans la file d'attente plutôt que exécutées de manière synchrone, vous devez implémenter l'interface IlluminateContractsQueueShouldQueue.

Si vous souhaitez envoyer des tâches vers une connexion spécifique, telle que redis ou sqs, vous devez définir la variable de connexion.

Si vous souhaitez pousser la tâche vers une file d'attente spécifique, vous pouvez définir la variable de file d'attente.

如果想要让任务延迟推送,那么需要设置 delay 变量。

如果想要设置任务至多重试的次数,可以使用 tries 变量;

如果想要设置任务可以运行的最大秒数,那么可以使用 timeout 参数。

如果想要手动访问队列,可以使用 trait : IlluminateQueueInteractsWithQueue。

任务的分发
分发服务
写好任务类后,就能通过 dispatch 辅助函数来分发它了。唯一需要传递给 dispatch 的参数是这个任务类的实例:

class PodcastController extends Controller
{
    public function store(Request $request)
    {
        // 创建播客...

        ProcessPodcast::dispatch($podcast);
    }
}

如果想延迟执行一个队列中的任务,可以用任务实例的 delay 方法。

 ProcessPodcast::dispatch($podcast)
                ->delay(Carbon::now()->addMinutes(10));

通过推送任务到不同的队列,可以给队列任务分类,甚至可以控制给不同的队列分配多少任务。要指定队列的话,就调用任务实例的 onQueue 方法:

ProcessPodcast::dispatch($podcast)->onQueue('processing');

如果使用了多个队列连接,可以将任务推到指定连接。要指定连接的话,可以在分发任务的时候使用 onConnection 方法:

ProcessPodcast::dispatch($podcast)->onConnection('redis
');

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
Laravel en action: applications et exemples du monde réelLaravel en action: applications et exemples du monde réelApr 16, 2025 am 12:02 AM

LaravelCanBeefectively utiliseInreal-worldapplicationsforbuildingscalablewebsolutions.1) itsImpplivesCrudoperations InsistfulapisusingEloventorm.2) Laravel'secosystem, y compristoolslikenova, amélioreDevelopment.3)

Fonction principale de Laravel: développement backendFonction principale de Laravel: développement backendApr 15, 2025 am 12:14 AM

Les fonctions principales de Laravel dans le développement back-end incluent le système de routage, l'éloquente, la fonction de migration, le système de cache et le système de file d'attente. 1. Le système de routage simplifie la cartographie de l'URL et améliore l'organisation et la maintenance du code. 2.Lesormorm fournit des opérations de données orientées objet pour améliorer l'efficacité du développement. 3. La fonction de migration gère la structure de la base de données via le contrôle de la version pour assurer la cohérence. 4. Le système de cache réduit les requêtes de la base de données et améliore la vitesse de réponse. 5. Le système de file d'attente traite efficacement les données à grande échelle, évite de bloquer les demandes des utilisateurs et d'améliorer les performances globales.

Capacités backend de Laravel: bases de données, logique et plus encoreCapacités backend de Laravel: bases de données, logique et plus encoreApr 14, 2025 am 12:04 AM

Laravel fonctionne fortement dans le développement back-end, simplifiant les opérations de la base de données via Elognentorm, les contrôleurs et les cours de service gèrent la logique métier, et offrant des files d'attente, des événements et d'autres fonctions. 1) Eloquentorm cartocie des tables de base de données via le modèle pour simplifier la requête. 2) La logique métier est traitée dans les contrôleurs et les classes de services pour améliorer la modularité et la maintenabilité. 3) D'autres fonctions telles que les systèmes de file d'attente aident à gérer les besoins complexes.

Polyvylity de Laravel: des sites simples aux systèmes complexesPolyvylity de Laravel: des sites simples aux systèmes complexesApr 13, 2025 am 12:13 AM

Le projet de développement de Laravel a été choisi en raison de sa flexibilité et de sa puissance pour répondre aux besoins de différentes tailles et complexités. Laravel fournit un système de routage, Eloquentorm, une ligne de commande artisanale et d'autres fonctions, soutenant le développement de blogs simples aux systèmes complexes au niveau de l'entreprise.

Laravel (PHP) contre Python: environnements de développement et écosystèmesLaravel (PHP) contre Python: environnements de développement et écosystèmesApr 12, 2025 am 12:10 AM

La comparaison entre Laravel et Python dans l'environnement de développement et l'écosystème est la suivante: 1. L'environnement de développement de Laravel est simple, seul PHP et compositeur sont nécessaires. Il fournit une riche gamme de packages d'extension tels que Laravelforge, mais la maintenance des forfaits d'extension peut ne pas être opportun. 2. L'environnement de développement de Python est également simple, seuls Python et PIP sont nécessaires. L'écosystème est énorme et couvre plusieurs champs, mais la gestion de la version et de la dépendance peut être complexe.

Laravel et le backend: alimentation logique d'application WebLaravel et le backend: alimentation logique d'application WebApr 11, 2025 am 11:29 AM

Comment Laravel joue-t-il un rôle dans la logique backend? Il simplifie et améliore le développement backend par le biais de systèmes de routage, d'éloquente, d'authentification et d'autorisation, d'événements et d'auditeurs et d'optimisation des performances. 1. Le système de routage permet la définition de la structure d'URL et demande la logique de traitement. 2.Lao-éloquente simplifie l'interaction de la base de données. 3. Le système d'authentification et d'autorisation est pratique pour la gestion des utilisateurs. 4. L'événement et l'écoute implémentent la structure de code couplée de manière lâche. 5. L'optimisation des performances améliore l'efficacité de l'application par la mise en cache et la file d'attente.

Pourquoi Laravel est-il si populaire?Pourquoi Laravel est-il si populaire?Apr 02, 2025 pm 02:16 PM

La popularité de Laravel comprend son processus de développement simplifié, offrant un environnement de développement agréable et des caractéristiques riches. 1) Il absorbe la philosophie de conception des rubyonrails, combinant la flexibilité de PHP. 2) Fournir des outils tels que l'éloquente, le moteur de modèle de lame, etc. pour améliorer l'efficacité du développement. 3) Son mécanisme d'architecture MVC et d'injection de dépendance rend le code plus modulaire et testable. 4) fournit des outils de débogage puissants et des méthodes d'optimisation des performances telles que les systèmes de mise en cache et les meilleures pratiques.

Quel est le meilleur, Django ou Laravel?Quel est le meilleur, Django ou Laravel?Mar 28, 2025 am 10:41 AM

Django et Laravel sont tous deux des frameworks à pile. Django convient aux développeurs Python et à la logique métier complexe, tandis que Laravel convient aux développeurs PHP et à la syntaxe élégante. 1.Django est basé sur Python et suit la philosophie "Battery-Complete", adaptée au développement rapide et à une grande concurrence. 2.Laravel est basé sur PHP, mettant l'accent sur l'expérience du développeur et convient aux projets de petite et moyenne taille.

See all articles

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 semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

SublimeText3 version anglaise

SublimeText3 version anglaise

Recommandé : version Win, prend en charge les invites de code !

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),