Heim  >  Artikel  >  PHP-Framework  >  So führen Sie die Laravel-Warteschlange ständig aus

So führen Sie die Laravel-Warteschlange ständig aus

王林
王林Original
2023-05-21 09:45:071116Durchsuche

Bei der Entwicklung mit Laravel sind Warteschlangen oft ein wesentlicher Bestandteil. Es kann die Fähigkeiten zur gleichzeitigen Verarbeitung von Anwendungen erheblich verbessern und ermöglicht die effektive Verwaltung und Verarbeitung einer großen Anzahl von Aufgaben. In der tatsächlichen Entwicklung stoßen wir jedoch häufig auf ein solches Problem: Die Warteschlange ist instabil, die Warteschlange stoppt plötzlich, wenn viele Aufgaben vorhanden sind, oder die Warteschlange kann nicht automatisch neu gestartet werden, wenn eine Ausnahme in der Aufgabe auftritt. Zu diesem Zeitpunkt benötigen wir einige Fähigkeiten, um einen stabilen Betrieb der Warteschlange zu ermöglichen. Hier sind mehrere Methoden, die Ihnen bei der Lösung dieser Probleme helfen können.

1. Supervisor-Daemon

Supervisor ist ein in Python geschriebenes Prozesskontrollsystem. Es kann uns helfen, einen Prozess im Hintergrund kontinuierlich zu überwachen Wenn es aus irgendeinem Grund beendet wird, kann es mit dem Host-Prozess neu gestartet werden. Dadurch wird sichergestellt, dass Ihre Warteschlange immer ausgeführt werden kann.

Supervisor installieren

Centos-Systemausführung

yum install -y supervisor

Ubuntu-Systemausführung

apt-get install -y supervisor

Öffnen Sie die Konfigurationsdatei

vim /etc/supervisord.conf

Treten Sie unserem Laravel bei -queue-Konfigurationsabschnitt

[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

Anweisungen:

  • Programm: Definieren Sie den Namen des Prozesses
  • Befehl: Definieren Sie den laufenden Befehl
  • Autostart: Automatisch nach dem Booten starten
  • Autorestart: Automatisch neu starten
  • user: run Der Benutzer des Prozesses

speichert die Änderung und lädt die Konfiguration

supervisorctl reload

Starte die Warteschlange

supervisorctl start laravel-queue

Auf diese Weise kann der Daemon-Prozess für die Warteschlange implementiert werden . Wenn die Warteschlange gestoppt wird, wird der Prozess automatisch neu gestartet, um sicherzustellen, dass die Warteschlange immer ausgeführt wird. Selbstverständlich können Sie über die Konfiguration in der Konfigurationsdatei auch mehrere Arbeitsprozesse ausführen, um die Warteschlangenverarbeitungsfähigkeiten zu verbessern.

2. Verwenden Sie Nomad von Hashicorp, um Marathon zu integrieren. Nomad von Hashicorp funktioniert ähnlich wie Marathon. Beide sind Open-Source-Tools für die Orchestrierung verteilter Aufgaben. Nomad ist in der Lage, eine Reihe verschiedener Arten von Aufgaben zu orchestrieren, indem es deren Standort und Entscheidungen abstrahiert. Im Vergleich zu Marathon bietet Nomad die Vorteile von geringem Gewicht, hoher Benutzererfahrung und einfacher Konfiguration.

Für die Verwendung von Nomad ist eine Docker-Umgebung erforderlich. Wenn Sie Docker nicht installiert haben, können Sie es zuerst über apt-get installieren:

apt-get install -y docker.io

Nomad-Job erstellen
  1. Einen Job erstellen Erstellen Sie im Stammverzeichnis des Projekts einen Nomad-Job über die Konfiguration:

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

}

}


Die obige Konfigurationsdatei von Docker wird für die Ausführung im Standalone-Modus verwendet und entsprechend den tatsächlichen Bedingungen in der Produktionsumgebung geändert.

Nomad Job starten
  1. Führen Sie den folgenden Befehl aus, um Nomad Job zu starten:

nomad run job.nomad

Damit ist der Start der Warteschlange abgeschlossen. Nomad führt unseren Job auf einem Knoten aus und kann den Job gleichzeitig überwachen. Wenn ein Problem mit der Aufgabe auftritt, kann Nomad die Aufgabe schnell neu starten und den Status aktualisieren. Nomad Job kann automatisch zwischen verschiedenen Knoten im Cluster migrieren, wodurch die Belastung eines bestimmten Knotens verringert und die Robustheit der gesamten Anwendung verbessert werden kann.

3. Verwendung von AWS SQS

Der SQS (Simple Queue Service) von AWS kann Nachrichten zwischen verteilten Anwendungen effizient übermitteln und verarbeiten und ermöglicht eine horizontale Skalierung der Nachrichtenverarbeitung. Im Laravel-Framework kann SQS problemlos in unsere Anwendungen integriert werden. Wir müssen lediglich das Laravel Queue-Paket installieren, das SQS unterstützt. Gleichzeitig hat jede Warteschlange in AWS SQS einen Mindestlebenszyklus (TTL). Wenn sie innerhalb dieses Zeitraums nicht erfolgreich ausgeführt wird, wird die Aufgabe von SQS gelöscht. Dadurch wird sichergestellt, dass eine Aufgabe letztendlich erfolgreich ausgeführt wird.

SQS installieren

Die Integration von SQS in Laravel ist relativ einfach. Sie müssen lediglich das Laravel Queue-Paket installieren, das SQS unterstützt. Kann direkt über Composer installiert werden:

Composer erfordert „aws/aws-sdk-php ^3.0“

Konfigurieren Sie SQS

Fügen Sie den folgenden Inhalt in der .env-Konfigurationsdatei hinzu:

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

Ersetzen Sie your_aws_access_key, your_aws_secret_key und your_queue_prefix durch Ihre eigenen.

Starten Sie die Warteschlange

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

Der obige Befehl startet eine SQS-Warteschlange und verwendet die Standardwarteschlange. Dabei gibt der Parameter --tries die Anzahl der Fehlerversuche für die Warteschlangenaufgabe an, --sleep gibt die Zeit an, die die Warteschlange nach der Verarbeitung der Aufgabe ruhen soll, und --timeout gibt die automatische Wiederholungszeit an, wenn die Warteschlangenaufgabe das Zeitlimit überschreitet. Die Warteschlange wird kontinuierlich durchlaufen, um Aufgaben abzurufen und auszuführen:

Wenn ein Fehler auftritt, wird die Warteschlange automatisch erneut versuchen, bis die Anzahl der Fehlerversuche der Warteschlangenaufgabe erschöpft ist oder die Ausführung erfolgreich ist.

Zusammenfassung

In diesem Artikel stellen wir verschiedene Methoden vor, um die Ausführung der Laravel-Warteschlange aufrechtzuerhalten. Durch Daemon-Prozesse, Aufgabenorchestrierung, Dienste von Drittanbietern usw. können wir eine stabilere und effizientere Betriebsunterstützung für die Warteschlange bereitstellen. Jede Methode hat ihre eigenen Vorteile und Anwendungsbereiche. Welche Methode Sie wählen, hängt von Ihrer tatsächlichen Situation ab.

Das obige ist der detaillierte Inhalt vonSo führen Sie die Laravel-Warteschlange ständig aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn