Maison > cadre php > Laravel > Comment exécuter la file d'attente Laravel tout le temps

Comment exécuter la file d'attente Laravel tout le temps

王林
Libérer: 2023-05-21 09:45:07
original
1159 Les gens l'ont consulté

Dans le développement utilisant Laravel, les files d'attente sont souvent un élément essentiel. Il peut considérablement améliorer les capacités de traitement simultané des applications, permettant ainsi de gérer et de traiter efficacement un grand nombre de tâches. Cependant, dans le développement réel, nous rencontrons souvent un tel problème : la file d'attente est instable, la file d'attente s'arrête soudainement lorsqu'il y a beaucoup de tâches, ou la file d'attente ne peut pas redémarrer automatiquement lorsqu'une exception se produit dans la tâche. À l’heure actuelle, nous avons besoin de certaines compétences pour permettre à la file d’attente de fonctionner de manière stable. Voici plusieurs méthodes pour vous aider à résoudre ces problèmes.

1. Démon Supervisor

Supervisor est un système de contrôle de processus écrit en Python. C'est un outil courant pour gérer les processus sur les serveurs Linux. Il peut nous aider à surveiller en permanence un processus en arrière-plan si le processus est bloqué en raison d'un problème. il se ferme pour une raison quelconque, il peut être redémarré avec le processus hôte. Cela garantit que votre file d'attente peut toujours fonctionner.

Superviseur d'installation

Exécution du système Centos

yum install -y superviseur

Exécution du système Ubuntu

apt-get install -y superviseur

Ouvrez le fichier de configuration

vim /etc/supervisord.conf

Rejoignez notre laravel -section de configuration de la file d'attente

[program:laravel-queue]
command=php /path/to/artisan queue:work redis --sleep=3 --tries=3
directory=/path/to/your/project
autostart =true
autorestart=true
user=www-data

Instructions :

  • programme : définir le nom du processus
  • commande : définir la commande en cours d'exécution
  • autostart : démarrer automatiquement après le démarrage
  • autorestart : redémarrer automatiquement
  • user: run L'utilisateur du processus

enregistre la modification et charge la configuration

supervisorctl reload

Démarrer la file d'attente

supervisorctl start laravel-queue

De cette façon, le processus démon pour la file d'attente peut être implémenté . Si la file d'attente est arrêtée, le processus redémarre automatiquement pour garantir que la file d'attente est toujours en cours d'exécution. Bien entendu, vous pouvez également exécuter plusieurs processus de travail via la configuration dans le fichier de configuration pour améliorer les capacités de traitement des files d'attente.

2. Utilisez Nomad de Hashicorp pour intégrer Marathon

Nomade de Hashicorp fonctionne de la même manière que Marathon. Ce sont deux outils open source pour l'orchestration de tâches distribuées. Nomad est capable d'orchestrer un ensemble de différents types de tâches en faisant abstraction de leur emplacement et de leurs décisions. Par rapport à Marathon, Nomad présente les avantages d'une légèreté, d'une expérience utilisateur élevée et d'une configuration facile.

L'utilisation de Nomad nécessite un environnement Docker. Si vous n'avez pas installé Docker, vous pouvez d'abord l'installer via apt-get :

apt-get install -y docker.io

  1. Créer un travail Nomad

Créer un travail dans. le répertoire racine du projet. fichier nomad, créez un Job Nomad via la configuration :

job "laravel_app" {
datacenters = ["dc1"]
type = "service"

group "app" {

task "laravel-queue" {
  driver = "docker"

  config {
    image = "your_docker_image"
    command = ["php", "artisan", "queue:work", "--tries", "1", "--timeout", "30"]
    args = [
      "--queue=critical,high,default,email,chat,sms",
      "--sleep=3"
    ]
    ports = ["http"]
  }

  resources {
    cpu    = 500
    memory = 128
    network {
      mbits = 10
      port "http" {}
    }
  }

  service {
    name = "laravel-queue"
    port = "http"
    check {
      type     = "http"
      path     = "/status"
      interval = "10s"
      timeout  = "2s"
    }
  }

  restart {
    attempts = 10
    interval = "5m"
    delay    = "25s"
    mode     = "failures"
  }
}
Copier après la connexion

}
}

le fichier de configuration Docker ci-dessus est utilisé pour s'exécuter en mode autonome et modifié en fonction des conditions réelles dans l'environnement de production.

  1. Démarrer Nomad Job

Exécutez la commande suivante pour démarrer Nomad Job :

nomad run job.nomad

Cela termine le démarrage de la file d'attente. Nomad exécutera notre travail sur un nœud et pourra surveiller le travail en même temps ; en cas de problème avec la tâche, Nomad peut rapidement redémarrer la tâche et mettre à jour le statut. Nomad Job peut migrer automatiquement entre différents nœuds du cluster, ce qui peut réduire la charge sur un certain nœud et améliorer la robustesse de l'application globale.

3. Utilisation d'AWS SQS

AWS (Simple Queue Service) est un service pour les files d'attente de messages. Il peut transmettre et traiter efficacement les messages entre les applications distribuées et permet aux capacités de traitement des messages d'atteindre une mise à l'échelle horizontale. Dans le framework Laravel, SQS peut être facilement intégré à nos applications. Il suffit d'installer le package Laravel Queue qui prend en charge SQS. Dans le même temps, dans AWS SQS, chaque file d'attente a un cycle de vie minimum (TTL). Si elle n'est pas exécutée avec succès dans ce délai, la tâche sera supprimée par SQS. Cela garantit qu’une tâche sera finalement exécutée avec succès.

Installer SQS

L'intégration de SQS dans Laravel est relativement simple. Il vous suffit d'installer le package Laravel Queue qui prend en charge SQS. Peut être installé directement via Composer :

composer nécessite "aws/aws-sdk-php ^3.0"

Configurer SQS

Ajoutez le contenu suivant dans le fichier de configuration .env :

QUEUE_DRIVER=sqs
AWS_ACCESS_KEY_ID=your_aws_access_key
AWS_SECR ET_ACCESS_KEY=your_aws_secret_key
AWS_DEFAULT_REGION=us-west-2
SQS_PREFIX=your_queue_prefix

Remplacez your_aws_access_key, your_aws_secret_key et your_queue_prefix par les vôtres.

Démarrer la file d'attente

php artisan queue:work sqs --queue=default --tries=3 --sleep=3 --timeout=60

La commande ci-dessus démarrera une file d'attente SQS et utilisera la file d'attente par défaut, où Le paramètre --tries indique le nombre de tentatives d'erreur pour la tâche de file d'attente, --sleep indique le temps de repos de la file d'attente après le traitement de la tâche et --timeout indique le temps de nouvelle tentative automatique lorsque la tâche de file d'attente expire. La file d'attente bouclera continuellement pour obtenir les tâches et les exécuter :

Lorsqu'une erreur se produit, la file d'attente réessayera automatiquement jusqu'à ce que le nombre de tentatives d'erreur de la tâche de file d'attente soit épuisé ou que l'exécution soit réussie.

Résumé

Dans cet article, nous présentons plusieurs méthodes pour maintenir l'exécution de la file d'attente Laravel. Grâce aux processus démons, à l'orchestration des tâches, aux services tiers, etc., nous pouvons fournir une prise en charge opérationnelle plus stable et plus efficace pour la file d'attente. Chaque méthode a ses propres avantages et son champ d’application. La méthode à choisir dépend de votre situation réelle.

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