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:
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 erstellenjob „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 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_keyAWS_ 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!