Cos’è Horizon
Laravel Horizon è una dashboard di monitoraggio dedicata alle code Redis di Laravel. Visualizza in tempo reale throughput, tempi di esecuzione e job falliti, e gestisce la configurazione dei worker come codice.Horizon è un pacchetto che estende le funzionalità di base delle code. Prima leggi le basi di Code e job. Come backend è sempre necessario Redis.
Installazione
Installa via Composer.config/horizon.php e app/Providers/HorizonServiceProvider.php.
Configurazione
Struttura di config/horizon.php
config/horizon.php gestisce tutta la configurazione dei worker. L’opzione centrale è environments.
Internamente Horizon usa una connessione Redis chiamata
horizon. Non usare questo nome per altre connessioni in config/database.php.CSP nonce (Content Security Policy)
Se, come parte della tua Content Security Policy, vuoi impostare un attributo nonce sui tagscript / style delle view di Horizon, usa Horizon::cspNonce. Poiché per ogni richiesta va assegnato un nuovo nonce, di solito lo chiami all’interno di un middleware.
middleware di config/horizon.php.
Supervisor
Ogni ambiente può avere uno o più “supervisor”. Un supervisor è l’unità di gestione di un gruppo di worker e in uno stesso ambiente possono coesistere più supervisor con code, strategie di bilanciamento e numeri di processi diversi.Valori di default
Con l’opzionedefaults puoi impostare valori applicati a tutti i supervisor.
Modalità manutenzione
Quando l’applicazione è in modalità manutenzione, Horizon di default non processa job. Per forzare l’elaborazione usa l’opzioneforce.
Numero massimo di tentativi
tries a 0 consenti retry illimitati.
Timeout dei job
Backoff (attesa prima del retry)
Indica i secondi da attendere prima di un nuovo tentativo dopo un’eccezione.Altre opzioni dei worker
Oltre atries, timeout e backoff, ogni supervisor accetta opzioni per controllare il comportamento dei worker e il momento del riavvio automatico. Riavviare periodicamente i processi long-running è una buona prassi per prevenire memory leak.
memory— memoria massima (MB) che un worker può consumare prima del riavvio. Default128.maxJobs— numero di job processati prima del riavvio.0significa illimitato. Default0.maxTime— secondi di attività di un worker prima del riavvio.0disabilita il riavvio a tempo. Default0.sleep— secondi di attesa tra un polling e il successivo quando non ci sono job. Default3.rest— secondi di pausa tra l’elaborazione di un job e il successivo. Default0.nice— priorità (“niceness”) del processo. Valori più alti significano priorità più bassa. Default0.
Strategie di bilanciamento
Horizon offre tre strategie di bilanciamento dei worker.auto (default)
auto (default)
Adegua automaticamente il numero di worker in base al carico della coda. L’intervallo si imposta con
minProcesses e maxProcesses.time— scaling in base al tempo stimato per svuotare la codasize— scaling in base al numero di job in coda
Con la strategia
auto l’ordine delle code non indica la priorità. Se ti serve forzare la priorità, usa più supervisor.simple
simple
Fissa il numero di worker e li distribuisce uniformemente sulle code indicate.Nell’esempio, 5 processi vengono assegnati a
default e 5 a notifications.false (nessun bilanciamento)
false (nessun bilanciamento)
Rispetta rigorosamente l’ordine di priorità delle code elencate. Comportamento identico al sistema di code di Laravel di default, ma con scaling del numero di worker in base agli arretrati.I job della coda
default vengono sempre processati prima di quelli di notifications.Autorizzazione della dashboard
La dashboard di Horizon è accessibile alla route/horizon. In locale è aperta a tutti; in produzione limita l’accesso con una gate.
Modifica il metodo gate() in app/Providers/HorizonServiceProvider.php.
Avvio di Horizon
Comandi principali
Sviluppo locale: riavvio automatico
Per riavviare Horizon automaticamente al variare dei file usahorizon:listen.
Sempre attivo con Supervisor
In produzione mantieni Horizon sempre attivo con Supervisor.Installazione di Supervisor
File di configurazione
Crea/etc/supervisor/conf.d/horizon.conf.
Avvio di Supervisor
Al deploy
Ad ogni deploy, riavvia Horizon per applicare le modifiche.autostart=true / autorestart=true, Horizon verrà riavviato automaticamente dopo la terminazione.
Gestione dei job
Tag
Horizon rileva automaticamente i modelli Eloquent legati ai job e aggiunge tag.tags().
tags().
Silenziare i job
I job che non vuoi vedere nella lista “job completati” della dashboard si silenziano daconfig/horizon.php.
Silenced.
Metriche e monitoring
La dashboard delle metriche di Horizon mostra throughput e tempi di esecuzione di job e code. Per registrare periodicamente uno snapshot, imposta uno schedule.metrics.trim_snapshots di config/horizon.php imposta quanti snapshot conservare per i grafici delle metriche. Poiché la retention è espressa in numero e non in tempo, il periodo effettivo dipende dalla frequenza di horizon:snapshot.
Notifiche di fallimento job
Puoi essere notificato quando i tempi di attesa in coda si allungano. Configura nel metodoboot() di app/Providers/HorizonServiceProvider.php.
Soglie di attesa
L’opzionewaits di config/horizon.php imposta la soglia (in secondi) che attiva la notifica.
0 disabiliti le notifiche per quella coda.
Gestione dei job falliti
Puoi eliminare i job falliti per ID o UUID.Upgrade
Ad ogni major di Horizon consulta sempre la guida di upgrade.Pagine correlate
Code e job
Fondamenti delle code Laravel: creazione, dispatch, batch e gestione dei fallimenti.
Redis
Configurazione e uso di Redis, il backend richiesto da Horizon.