Laravel Horizon en production — dimensionner les workers, survivre à Redis, et la stratégie de retry
6 mai 2026 · 1 min de lecture · par Sudhanshu K.
Horizon rend les queues Laravel lisibles. Le dashboard est super, le modèle de supervisor est réellement utile, et l'histoire de failover est correcte. Ce qu'il ne fait pas, c'est décider de votre dimensionnement de workers, de votre stratégie d'isolation de queues, ou de votre policy de retry — ce sont toujours vos problèmes, et les défauts sont conservateurs d'une manière qui cache de vrais problèmes en prod.
Voici la config Horizon que nous livrons sur chaque install Laravel managée qui fait du vrai travail en arrière-plan.
Une config supervisor production
'environments' => [
'production' => [
'supervisor-default' => [
'connection' => 'redis',
'queue' => ['critical', 'default'],
'balance' => 'auto',
'minProcesses' => 4,
'maxProcesses' => 20,
'balanceMaxShift' => 2,
'balanceCooldown' => 3,
'tries' => 5,
'timeout' => 60,
],
'supervisor-long' => [
'connection' => 'redis',
'queue' => ['long-running'],
'balance' => 'simple',
'maxProcesses' => 4,
'timeout' => 600,
],
],
],Deux supervisors : un pour les jobs courts à haute priorité (balanced auto, plus de workers), un pour les jobs batch long-running (workers fixes, timeout plus long, pas de balancing). Mettre les deux sur le même supervisor avec le même timeout est la mauvaise config Horizon la plus courante que nous voyons.
L'article complet couvre :
- Isolation des queues — pourquoi « default » ne devrait pas être la seule queue
balance: autovsbalance: simplevsbalance: false- Persistance Redis (AOF every-second) et ce qui se passe quand Redis redémarre
- Le helper retry-backoff et l'idempotence sur les handlers de webhooks entrants
- Détection de fuite mémoire —
--memory=128et le pattern de recyclage de worker - Hygiène du dashboard des failed jobs et les alertes que nous câblons sur la table failed_jobs
Nous livrons cette config Horizon sur chaque déploiement Laravel managé.
Article complet disponible
Lire l'article complet