Horizon-Warteschlangenverwaltungstool
- Einführung
- Installation
- Konfiguration
- Horizont bereitstellen
- Benutzerdefiniertes Tag
- Konfigurieren Sie den Schwellenwert für übermäßige Wartezeit
Laravel Horizont
Einführung
Horizont Bietet ein schönes Dashboard und kann Ihre Laravel Redis-Warteschlange über Code konfigurieren. Außerdem können Sie Schlüsselindikatoren in Ihrem Warteschlangensystem wie Aufgabendurchsatz, Laufzeit und fehlgeschlagene Aufgaben einfach überwachen.
Alle Konfigurationselemente werden in einer einfachen Konfigurationsdatei gespeichert, sodass Sie sie in die kollaborative Versionskontrolle des Teams einfügen können, um die Zusammenarbeit im Team zu erleichtern.
Installieren
{note} Sie sollten sicherstellen, dass der
queue
-Warteschlangentreiber in derredis
-Konfigurationsdatei festgelegt ist.Sie sollten Composer verwenden, um Horizon für Ihr Laravel-Projekt zu installieren:
composer require laravel/horizon
Nachdem die Installation abgeschlossen ist, verwenden Sie
horizon:install
, um den Artisan-Befehl auszugeben:php artisan horizon:install
Sie sollten auch die
failed_jobs
-Tabelle erstellen, die Laravel zum Speichern aller verwenden wird Fehlgeschlagene Warteschlangenaufgabe:php artisan queue:failed-table php artisan migrate
Konfiguration
Nach der Veröffentlichung von Horizon-bezogenen Dateien wird seine Hauptkonfigurationsdatei in
config/horizon.php
abgelegt. In dieser Datei können Sie warteschlangenbezogene Optionen konfigurieren. Für jedes Konfigurationselement gibt es detaillierte Anweisungen zur Verwendung. Bitte lesen Sie diese Datei im Detail.Ausbalancierte Konfiguration
Horizon bietet drei Ausgleichsstrategien:
simple
,auto
undfalse
. Der Standardwert istsimple
, wodurch die empfangenen Aufgaben gleichmäßig auf die Warteschlangenprozesse verteilt werden:'balance' => 'simple',
auto
Die Strategie passt die Anzahl der Arbeitsprozessaufgaben in jeder Warteschlange basierend auf der aktuellen Arbeitslast an. Beispiel: Wenn dienotifications
-Warteschlange 1000 auszuführende Aufgaben enthält, Ihrerender
-Warteschlange jedoch leer ist, weist Horizon dernotifications
-Warteschlange weitere Arbeitsprozesse zu, bis alle Aufgaben in dernotifications
-Warteschlange abgeschlossen sind. Wenn das Konfigurationselementbalance
auffalse
konfiguriert ist, verwendet Horizon das Standardausführungsverhalten von Laravel, das Warteschlangenaufgaben in der in der Konfiguration aufgeführten Reihenfolge verarbeitet.Aufgaben kürzen
horizon
Mit der Konfigurationsdatei können Sie konfigurieren, wie lange (in Minuten) aktuelle und fehlgeschlagene Aufgaben aufbewahrt werden sollen. Standardmäßig werden aktuelle Aufgaben eine Stunde lang und fehlgeschlagene Aufgaben eine Woche lang aufbewahrt:'trim' => [ 'recent' => 60, 'failed' => 10080, ],
Dashboard-Berechtigungsüberprüfung
Horizon Dashboard Die Route ist
/horizon
. Standardmäßig können Sie nur in der Umgebunglocal
auf das Dashboard zugreifen. In Ihrerapp/Providers/HorizonServiceProvider.php
-Datei gibt es einegate
-Methode. Diese Berechtigung steuert den Zugriff auf Horizon in nicht lokalen Umgebungen. Sie können diese Fassade nach Bedarf ändern, um den Zugriff auf Ihre Horizon-Installation einzuschränken:/** * 注册 Horizon gate 方法 * * gate 决定了谁可以在非本地环境中访问 Horizon。 * * @return void */ protected function gate(){ Gate::define('viewHorizon', function ($user) { return in_array($user->email, [ 'taylor@laravel.com', ]); }); }
Run Horizon
im
config/horizon.php
Datei Nachdem Sie Ihren Warteschlangenausführungsprozess in konfiguriert haben, können Sie Horizon mit dem Befehlhorizon
Artisan starten. Zum Starten aller konfigurierten Warteschlangenprozesse ist nur eine Befehlsanweisung erforderlich:php artisan horizon
Sie können auch die Artisan-Befehle
horizon:pause
undhorizon:continue
verwenden, um Warteschlangenaufgaben anzuhalten oder fortzusetzen:php artisan horizon:pausephp artisan horizon:continue
Das ist möglich Verwenden Sie den Befehl
horizon:terminate
Artisan, um den Horizon-Hauptprozess ordnungsgemäß zu beenden. Horizon wird beendet, nachdem die ausgeführte Aufgabe verarbeitet wurde:php artisan horizon:terminate
Horizon bereitstellen
Wenn Sie Horizon auf einem Online-Server bereitstellen, müssen Sie einen Prozessmonitor konfigurieren, um den Befehl
php artisan horizon
zu erkennen und ihn automatisch neu zu starten, wenn er unerwartet beendet wird. Wenn neuer Code gestartet wird, muss der Prozessmonitor den Horizon-Prozess beenden und Horizon mit dem geänderten Code neu starten.Supervisor-Konfiguration
Wenn Sie den Supervisor Process Monitor zur Verwaltung Ihres
horizon
-Prozesses verwenden, dann wird die folgende Konfigurationsdatei Ihren Anforderungen entsprechen:[program:horizon] process_name=%(program_name)s command=php /home/forge/app.com/artisan horizon autostart=true autorestart=true user=forge redirect_stderr=true stdout_logfile=/home/forge/app.com/horizon.log
{ Tipp } Wenn Sie den Server nicht selbst warten möchten, können Sie Laravel Forge, Forge, verwenden Bietet PHP7 und alles andere, was Sie zum Ausführen einer modernen, leistungsstarken Laravel-Anwendung mit Horizon benötigen.
Tag
Horizon ermöglicht Ihnen das Zuweisen von „Tags“ zu Aufgaben, einschließlich E-Mails, Ereignisübertragungen, Benachrichtigungen und Warteschlangenereignissen Zuhörer. Tatsächlich beschriftet Horizon die meisten Aufgaben intelligent und automatisch basierend auf dem Eloquent-Modell, das die Aufgabe trägt, wie im folgenden Aufgabenbeispiel:
<?php namespace App\Jobs; use App\Video;use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; class RenderVideo implements ShouldQueue{ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * video 实例 * * @var \App\Video */ public $video; /** * 创建工作实例 * * @param \App\Video $video * @return void */ public function __construct(Video $video) { $this->video = $video; } /** * 执行任务 * * @return void */ public function handle() { // } }
, wenn die Warteschlangenaufgabe eine
id
-Instanz ist, die1
trägt alsAppVideo
, dann wird es automatisch mit dem TagAppVideo:1
markiert. Da Horizon prüft, ob das Aufgabenattribut über ein eloquentes Modell verfügt, markiert Horizon die Aufgabe intelligent mit dem Klassennamen und dem Primärschlüssel des Modells, wenn ein eloquentes Modell gefunden wird:$video = App\Video::find(1); App\Jobs\RenderVideo::dispatch($video);
Benutzerdefiniertes Tag
Wenn Sie Beschriftungen für Objekte in der Warteschlange manuell definieren möchten, können Sie für diese Klasse ein
tags
definieren Methode:class RenderVideo implements ShouldQueue{ /** * 获取分配给这个任务的标签 * * @return array */ public function tags() { return ['render', 'video:'.$this->video->id]; } }
Benachrichtigungen
Hinweis: Bevor Sie Benachrichtigungen verwenden, sollten Sie
guzzlehttp/guzzle
Composer hinzufügen Paket zu Ihrem Projekt hinzufügen. Wenn Sie Horizon zum Senden von SMS-Benachrichtigungen konfigurieren, sollten Sie auch das Kapitel Abhängigkeiten des Nexmo-Benachrichtigungstreibers lesen.Wenn Sie eine Benachrichtigung auslösen müssen, wenn die Wartezeit in der Warteschlange zu lang ist, können Sie die Methoden
AppServiceProvider
,Horizon::routeMailNotificationsTo
undHorizon::routeSlackNotificationsTo
imHorizon::routeSmsNotificationsTo
der Anwendung aufrufen:Horizon::routeMailNotificationsTo('example@example.com'); Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel'); Horizon::routeSmsNotificationsTo('15556667777');
Konfigurieren Sie den Schwellenwert für übermäßige Wartezeit
Sie können ihn in
config/horizon.php
konfigurieren Wenn die Wartezeit zu lang ist, legen Sie in der Konfigurationsdatei eine bestimmte Anzahl von Sekunden fest.waits
Konfigurationselemente können Schwellenwerte für jeden Link/jede Warteschlange konfigurieren:'waits' => [ 'redis:default' => 60, ],
Metriken
Horizon enthält ein Metrik-Dashboard, das Aufgaben bereitstellen kann und Informationen zur Warteschlangenwartezeit und zum Durchsatz. Um dieses Dashboard zu füllen, müssen Sie den Zeitplaner der Anwendung konfigurieren. Führen Sie alle fünf Minuten den
snapshot
Artisan-Befehl von Horizon aus:/** * 定义应用程序的任务调度 * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule){ $schedule->command('horizon:snapshot')->everyFiveMinutes(); }
Dieser Artikel wurde zuerst auf der Website LearnKu.com veröffentlicht.