Heim > Artikel > PHP-Framework > Laravel-Entwicklung: Wie verwaltet man asynchrone Aufgaben mit Laravel Queues und Supervisor?
Laravel-Entwicklung: Wie verwende ich Laravel-Warteschlangen und Supervisor, um asynchrone Aufgaben zu verwalten?
In modernen Webanwendungen sind asynchrone Aufgaben zu einem festen Bestandteil des Tagesgeschäfts geworden. Asynchrone Aufgaben können die Reaktionszeit von Anwendungen verbessern, die Benutzererfahrung optimieren und die Skalierbarkeit von Anwendungen verbessern. Laravel Queues ist ein leistungsstarkes Tool, das vom Laravel-Framework zur Bearbeitung asynchroner Aufgaben und Nachrichtenwarteschlangen bereitgestellt wird. In diesem Artikel werden das Konzept und die Verwendung von Laravel-Warteschlangen vorgestellt und mit Supervisor kombiniert, um asynchrone Aufgaben zu verwalten.
Laravel Queues ist eine Methode zur Handhabung asynchroner Aufgaben und Nachrichtenwarteschlangen. Mit Laravel-Warteschlangen können Sie zeitaufwändige Aufgaben in eine Warteschlange stellen, ohne die Antwortzeit Ihrer Webanfragen zu beeinträchtigen. Das Versenden einer E-Mail, das Verarbeiten eines Videos oder das Erstellen einer PDF-Datei sind beispielsweise alles zeitaufwändige Vorgänge, und die Verwendung einer Warteschlange, um sie in die Hintergrundverarbeitung zu stellen, kann Ihre Anwendung effizienter und reaktionsschneller machen.
Laravel Queues unterstützt über einige integrierte Warteschlangentreiber mehrere Backend-Technologien wie Datenbank, Redis, Beanstalkd und Amazon SQS. Dadurch können Entwickler ihre bevorzugte Warteschlangentechnologie zur Bearbeitung asynchroner Aufgaben verwenden.
Im Folgenden stellen wir Ihnen Schritt für Schritt vor, wie Sie Laravel-Warteschlangen zur Bearbeitung asynchroner Aufgaben verwenden.
In der Laravel-Konfigurationsdatei gibt es eine Datei namens queue.php, die Sie zum Konfigurieren von Warteschlangen und Warteschlangentreibern verwenden können. Sie können die Datei queue.php mit dem folgenden Befehl generieren:
php artisan queue:table php artisan queue:failed-table php artisan migrate
Dadurch werden die Migrationsdatei und die Warteschlangentabelle generiert. Führen Sie den Migrationsbefehl aus, um die Migration durchzuführen.
In der Datei queue.php haben Sie die Möglichkeit, mehrere Warteschlangentreiber zu verwenden:
Wenn Sie beispielsweise den Redis-Warteschlangentreiber verwenden möchten, konfigurieren Sie bitte die Datei queue.php wie folgt:
'default' => env('QUEUE_CONNECTION', 'redis'), 'connections' => [ 'redis' => [ 'driver' => 'redis', 'connection' => 'default', 'queue' => env('REDIS_QUEUE', 'default'), 'retry_after' => 90, 'block_for' => null, ], ]
Als nächstes müssen Sie eine Warteschlangenaufgabenklasse erstellen Verarbeitung asynchroner Aufgaben. Diese Klasse sollte eine einfache PHP-Klasse sein, die die Logik der Aufgabe definiert. Der folgende Code ist beispielsweise eine asynchrone Task-Klasse zum Senden von E-Mails:
class SendEmail implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $email; /** * Create a new job instance. * * @return void */ public function __construct($email) { $this->email = $email; } /** * Execute the job. * * @return void */ public function handle() { Mail::to($this->email)->send(new WelcomeEmail()); } }
Diese Klasse implementiert die ShouldQueue-Schnittstelle, die erforderlich ist, um Laravel anzuweisen, diese Klasse in eine asynchrone Task-Klasse umzuwandeln. Die Methode handle() definiert die spezifische Logik der Aufgabe, sodass die Aufgaben, die Sie asynchron verarbeiten müssen, hier ausgeführt werden können.
Da Sie nun Ihre Warteschlangenaufgabe und den Warteschlangentreiber bereit haben, besteht der nächste Schritt darin, die Aufgabe in die Warteschlange zu stellen. Verwenden Sie den folgenden Code, um an einer beliebigen Stelle in Ihrem Projekt eine Eloquent-Warteschlange aufzurufen:
use AppJobsSendEmail; use IlluminateSupportFacadesQueue; ... Queue::push(new SendEmail('example@test.com'));
Oder Sie können die Methode „dispatch()“ verwenden, um eine Aufgabe wie folgt in die Warteschlange zu stellen:
SendEmail::dispatch('example@test.com');
Sobald Sie Stellen Sie die Aufgabe in die Warteschlange. Die Aufgabe wird an die Warteschlange weitergeleitet und wartet auf ihre Ausführung. Sie können den folgenden Code verwenden, um die Warteschlange auszuführen:
php artisan queue:work
Durch die Ausführung dieses Befehls wird ein Listener gestartet und die Aufgaben in der Warteschlange verarbeitet.
Da Warteschlangenaufgaben im Hintergrund ausgeführt werden müssen, muss ein Prozessdämon auf dem Server eingerichtet werden, um sicherzustellen, dass Aufgaben weiterhin ausgeführt werden können. Supervisor ist ein häufig verwendeter Prozessdämon, der sicherstellt, dass Hintergrundprozesse nicht abnormal beendet werden, und sie bei Bedarf neu startet.
Im Ubuntu-System können Sie den folgenden Befehl verwenden, um Supervisor zu installieren:
sudo apt-get update sudo apt-get install supervisor
Erstellen Sie sie im Verzeichnis /etc/supervisor/conf.d A B. myqueue.conf:
nano /etc/supervisor/conf.d/myqueue.conf
Fügen Sie Folgendes zur Konfigurationsdatei hinzu und stellen Sie sicher, dass Sie den Pfad, den Befehl und den Benutzernamen so ändern, dass sie zu Ihrem Programm passen:
[program:myqueue] process_name=%(program_name)s_%(process_num)02d command=/usr/bin/php /path/to/artisan queue:work --sleep=3 --tries=3 --daemon autostart=true autorestart=true user=username numprocs=1 redirect_stderr=true stdout_logfile=/path/to/storage/logs/myqueue.log
Nachdem Sie Änderungen vorgenommen haben Wenn Sie die Konfigurationsdatei des Supervisors laden, müssen Sie den Supervisor benachrichtigen, damit er die Konfigurationsdatei neu laden kann. Verwenden Sie den folgenden Befehl, um den Supervisor neu zu laden:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start all
Sie können die Ausgabe- und Fehlerinformationen der asynchronen Aufgabe in der Protokolldatei des Supervisors anzeigen. Sie können beispielsweise das Supervisor-Protokoll anzeigen, indem Sie den in der Konfigurationsdatei angegebenen Pfad und Protokolldateinamen anzeigen:
tail -f /path/to/storage/logs/myqueue.log
In diesem Artikel wird erläutert, wie Sie mit Laravel Queues und Supervisor asynchrone Aufgaben verwalten können zeitaufwändige Aufgaben Aufgaben werden in eine Warteschlange gestellt und machen die Anwendung effizienter und reaktionsschneller. Verwenden Sie Supervisor, um sicherzustellen, dass Hintergrundaufgaben weiterhin ausgeführt und bei Bedarf automatisch neu gestartet werden können. Ich hoffe, dass dieser Artikel für Ihre Entwicklung hilfreich sein wird.
Das obige ist der detaillierte Inhalt vonLaravel-Entwicklung: Wie verwaltet man asynchrone Aufgaben mit Laravel Queues und Supervisor?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!