https://d226lax1qjow5r.cloudfront.net/blog/blogposts/queue-notifications-nexmo-laravel-horizon-dr/Queue-wait-time-notifications.png

Warteschlangen-Wartezeit-Benachrichtigungen mit Nexmo und Laravel Horizon

Zuletzt aktualisiert am May 4, 2021

Lesedauer: 2 Minuten

Web-Applikationen müssen rechenintensive, zeitaufwändige Aufgaben wie das Versenden von E-Mails, die Verarbeitung hochgeladener Dateien oder den Aufruf von APIs ausführen. Die Ausführung dieser Aufgaben während der Webanforderung eines Benutzers kann dazu führen, dass sich Ihre Webanwendung langsam und klobig anfühlt, was für die Benutzer frustrierend ist.

Anstatt diese Aufgaben während einer Webanforderung auszuführen, können sie zu einer Job-Warteschlange hinzugefügt werden, die später von Warteschlangen-"Arbeitern" verarbeitet wird. Das Laravel-Framework bietet von Haus aus Unterstützung für Jobs in Warteschlangen und den Start von Workern zur Verarbeitung dieser Jobs. Darüber hinaus bietet das Laravel-Horizont das Laravel-Warteschlangensystem, indem es eine Benutzeroberfläche für die Überwachung von Warteschlangen, den Lastausgleich von Arbeitern und vieles mehr hinzufügt. Horizon verwendet Rediseinen leistungsstarken Open-Source-Datenspeicher, um ausstehende, verarbeitete und fehlgeschlagene Aufträge sowie Metriken wie die durchschnittliche Auftragsverarbeitungszeit und die Wartezeit in der Warteschlange zu verfolgen.

Sobald Ihre Anwendung jedoch Hintergrund-Warteschlangen nutzt, kann es bei Verkehrsspitzen dazu kommen, dass sich Aufträge schnell in der Warteschlange ansammeln. Wenn der Warteschlange nicht genügend Arbeiter zugewiesen sind, müssen die Aufträge lange in der Warteschlange warten, bevor sie verarbeitet werden.

Nexmo ist die Rettung! Durch die Nutzung von Ereignissen und Benachrichtigungsdiensten, die in Laravel Horizon integriert sind, können wir Horizon anweisen, eine SMS-Nachricht an unser Telefon zu senden, wenn die Wartezeit in der Warteschlange einen von uns festgelegten Schwellenwert überschreitet.

Nexmo Client Installation & Konfiguration

Konfigurieren wir zunächst den Nexmo-Dienst für unsere Anwendung. Die Benachrichtigungsdienste von Laravel haben bereits eine integrierte Unterstützung für den Versand von SMS-Nachrichten mit Nexmo. Wir müssen jedoch ein paar Zeilen der Konfiguration zu unserer config/services.php Konfigurationsdatei hinzufügen:

'nexmo' => [
    'key' => env('NEXMO_KEY'),
    'secret' => env('NEXMO_SECRET'),
    'sms_from' => 'virtual-phone-number',
],

Sobald Sie diese Konfigurationsoptionen zu Ihrer config/services.php Konfigurationsdatei hinzugefügt wurden, sollten Sie sicherstellen, dass die NEXMO_KEY und NEXMO_SECRET Umgebungsvariablen in die Datei Ihrer Anwendung .env Datei hinzugefügt werden. Diese Konfigurationswerte können über Ihre Nexmo Account-Einstellungen.

Darüber hinaus sollte der sms_from Konfigurationswert so geändert werden, dass er der Nummer einer Ihrer virtuellen Nexmo-Nummern entspricht. Dies ist die Telefonnummer, von der Ihre SMS-Nachrichten gesendet werden.

Als nächstes müssen wir das nexmo/client Paket mit Composer in unsere Anwendung installieren. Wir können dies mit dem Befehl "composer require" in unserem Terminal tun:

composer require nexmo/client

Super! Wir haben den Nexmo-Client installiert und konfiguriert. Als nächstes müssen wir Horizon installieren.

Laravel Horizon Installation und Konfiguration

Um Laravel Horizon zu installieren, verwenden wir Composer, um das laravel/horizon Paket zu installieren:

composer require laravel/horizon

Nachdem Composer die Installation von Horizon abgeschlossen hat, müssen wir die Konfigurationsdateien von Horizon veröffentlichen. Dies können wir mit dem Laravel vendor:publish Artisan CLI-Befehl:

php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"

Horizon ist jetzt installiert! Bevor Sie jedoch fortfahren, sollten Sie sicherstellen, dass die default Treiberkonfiguration in Ihrer config/queue.php Konfigurationsdatei eingestellt ist auf redis.

Konfiguration Wartezeit-Schwellenwerte

Als Nächstes können wir den Schwellenwert für die Wartezeit in der Warteschlange konfigurieren. Wenn die Wartezeit in der Warteschlange diesen Schwellenwert überschreitet, möchten wir eine SMS-Nachricht erhalten, die uns auf die Situation aufmerksam macht. Die wait Konfigurationsoption in der config/horizon.php Konfigurationsdatei können wir den maximalen Schwellenwert für die Wartezeit in der Warteschlange in Sekunden angeben. Standardmäßig ist dieser Schwellenwert auf 60 Sekunden eingestellt; Sie können diesen Wert jedoch je nach den Anforderungen Ihrer Anwendung ändern.

'waits' => [
    'redis:default' => 60,
],

Konfigurieren der Nexmo-SMS-Benachrichtigung

Schließlich können wir Horizon anweisen, die SMS zu senden, wenn die Wartezeit in der Warteschlange überschritten wird. Innerhalb der boot Methode unserer Anwendung in der AppServiceProvider Klasse fügen wir die folgende Codezeile ein:

\Laravel\Horizon\Horizon::routeSmsNotificationsTo(
    'your-phone-number'
);

Natürlich, your-phone-number durch die Telefonnummer ersetzt werden, an die die SMS-Benachrichtigung über die Wartezeit gesendet werden soll.

Das war's! Wenn die Wartezeit in der Warteschlange unserer Anwendung überschritten wird, erhalten wir über Nexmo eine SMS, die uns auf die lange Wartezeit hinweist. Daraufhin können wir die Kapazität unserer Warteschlangenmitarbeiter schnell erhöhen und das Problem beheben!

Eine Demo-Anwendung, die Horizon und Nexmo nutzt, ist auf meinem GitHub verfügbar.

Teilen Sie:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Taylor Otwell

Husband to @abigailotwell. Web Developer. Founder of Laravel, Forge, Envoyer, Spark, and more.