Kolejki w Laravel przenoszą ciężkie operacje poza cykl żądania HTTP — e-mail po rejestracji, synchronizacja z Baselinkerem, generowanie faktury czy przetwarzanie pliku nie muszą blokować użytkownika. Efekt to szybsze odpowiedzi aplikacji i procesy, które nie gubią się przy awariach. Laravel Horizon dodaje do tego monitoring, metryki i zarządzanie workerami w czasie rzeczywistym. Wdrożenie kolejek w istniejącym projekcie to koszt orientacyjnie 2 000–10 000 zł netto + VAT.
Kiedy aplikacja potrzebuje kolejek?
Kolejki przestają być opcją, gdy pojawia się którykolwiek z tych sygnałów.
- Żądania trwają dłużej niż 1–2 sekundy — użytkownik czeka na operacje, które nie muszą dziać się na żywo.
- Operacje zewnętrzne blokują odpowiedź — wysyłka e-maili, PDF-ów, integracje API, przetwarzanie obrazów.
- Zdarzają się timeouty i podwójne wykonania — brak mechanizmu retry powoduje, że błąd API partnera kończy proces bezpowrotnie.
- Importy i eksporty danych — duże pliki CSV przetwarzane w jednym żądaniu to gwarancja problemów.
- Powiadomienia i webhooki — wysyłka setek powiadomień w pętli zabija wydajność aplikacji.
Wskazówka: Zasada kciuka — jeśli operacja nie musi zakończyć się przed wysłaniem odpowiedzi do użytkownika, powinna trafić do kolejki. Użytkownik dostaje natychmiastową odpowiedź, a zadanie wykonuje się w tle z możliwością ponowienia.
Jak działają kolejki w Laravel?
System kolejek w Laravel składa się z trzech elementów: zadań (jobs), kolejek (queues) i workerów. Zadanie to klasa opisująca pracę do wykonania.
php artisan make:job SyncInventoryWithBaselinker
Zadanie możesz wysłać do kolejki w dowolnym miejscu aplikacji.
SyncInventoryWithBaselinker::dispatch($order->id);
Worker to proces, który pobiera zadania i je wykonuje.
php artisan queue:work --tries=3
W produkcji workery uruchamiane są jako usługi systemowe (Supervisor lub systemd) i restartowane po każdym wdrożeniu — to jeden z kroków, które automatyzuje pipeline CI/CD.
Redis czy database? Wybór sterownika kolejek
Laravel obsługuje kilka sterowników kolejek. W praktyce wybór sprowadza się do dwóch opcji.
| Kryterium | Database | Redis |
|---|---|---|
| Konfiguracja | Zero — tabela w istniejącej bazie | Wymaga serwera Redis |
| Wydajność | Wystarczająca do małych i średnich obciążeń | Bardzo wysoka, tysiące zadań na minutę |
| Priorytety kolejek | Tak | Tak |
| Horizon | Nie | Tak |
| Kiedy wybrać | Proste aplikacje, mały ruch | Produkcja, integracje, wysoka skala |
Dla aplikacji z jedną bazą i kilkoma zadaniami dziennie wystarczy sterownik database. Gdy pojawiają się integracje, powiadomienia i przetwarzanie wsadowe — Redis staje się naturalnym wyborem, między innymi po to, żeby kolejki nie konkurowały o zasoby z bazą aplikacji. Konfigurację i wzorce pracy z Redisem opisuję w artykule Redis w Laravel — cache, kolejki i sesje.
Laravel Horizon — monitoring i kontrola kolejek
Horizon to panel i system zarządzania kolejkami opartymi o Redis. Daje cztery rzeczy, których brakuje w gołym queue:work.
- Dashboard w czasie rzeczywistym — przepustowość, czasy oczekiwania, obciążenie kolejek.
- Metryki i historia — ile zadań wykonano, ile się nie powiodło, jakie były czasy przetwarzania.
- Zarządzanie workerami — liczba procesów dla każdej kolejki, priorytety, autoskalowanie.
- Alerty o problemach — zalegające kolejki widzisz zanim staną się awarią.
Konfiguracja jest deklaratywna — definiujesz w pliku konfiguracyjnym, ile procesów ma obsługiwać każdą kolejkę, a Horizon pilnuje reszty.
Retry, backoff i idempotencja — kolejki odporne na błędy
Kolejki bez obsługi błędów tylko przesuwają problem w czasie. Trzy mechanizmy, które stosujemy w każdym wdrożeniu
- Retry — zadanie, które się nie powiodło, jest ponawiane określoną liczbę razy (
--tries). - Backoff — kolejne próby są rozłożone w czasie, żeby nie dobijać niedostępnego API partnera.
- Idempotencja — zadanie wykonane dwukrotnie nie tworzy dwóch faktur ani dwóch zamówień. To szczególnie ważne przy integracjach.
Jak projektować odporne procesy asynchroniczne, opisałem szerzej w artykule integracje API i webhooki — jak projektować odporne procesy.
Failed jobs — jak nie zgubić zadania
Każde zadanie, które przekroczy limit prób, trafia do tabeli failed_jobs. To nie jest porażka systemu — to element procesu. W praktyce:
- monitorujemy tabelę failed_jobs i alertujemy o nowych wpisach,
- dodajemy komendę ponawiania (
queue:retry all) do procedur operacyjnych, - analizujemy przyczyny — najczęściej to zmiany w zewnętrznym API lub wygasłe tokeny.
Najgorszy scenariusz to zadanie, które zniknęło bez śladu. Laravel tego nie robi — każde nieudane zadanie zostaje zapisane wraz z błędem.
Kolejki a wydajność aplikacji
Kolejki to jedna z najskuteczniejszych optymalizacji wydajności w Laravel — często skuteczniejsza niż mikrooptymalizacje zapytań SQL. Przeniesienie ciężkich operacji do tła skraca czas odpowiedzi nawet o 80%, a użytkownik nie czeka na operacje, które nie wpływają na to, co widzi. Pozostałe techniki opisuję w artykule optymalizacja wydajności aplikacji Laravel.
Ile kosztuje wdrożenie kolejek?
Orientacyjne koszty wdrożenia kolejek i Horizon, netto + VAT
- Konfiguracja kolejek w nowym projekcie — element standardu, wliczony w stawkę 90–160 zł/h.
- Wdrożenie kolejek w istniejącej aplikacji — 2 000–10 000 zł, zależnie od liczby procesów do przeniesienia.
- Migracja z database na Redis plus Horizon — 2 000–5 000 zł, zwykle 2–4 dni pracy.
Jeśli aplikacja zwalnia przy wzroście ruchu albo integracje gubią się przy błędach API — opisz projekt w formularzu kontaktowym. Wycena jest bezpłatna. Szukasz wykonawcy?
Zobacz programistę Laravel na zlecenie.
Najczęściej zadawane pytania
Kiedy wprowadzić kolejki w aplikacji Laravel?
Gdy operacje zewnętrzne (e-mail, integracje, PDF) blokują odpowiedzi HTTP, żądania przekraczają 1–2 sekundy albo potrzebujesz ponawiania nieudanych operacji. Kolejki warto zaplanować już na etapie architektury — dopisywanie ich później jest możliwe, ale kosztowniejsze.
Redis czy database do kolejek?
Database wystarczy dla prostych aplikacji z małym ruchem i bez wymagań na monitoring. Redis wybierz, gdy potrzebujesz wydajności, priorytetów i Horizon — czyli w większości aplikacji produkcyjnych z integracjami i powiadomieniami.
Co daje Laravel Horizon?
Horizon daje dashboard w czasie rzeczywistym, metryki przepustowości i błędów, konfigurację liczby workerów dla każdej kolejki oraz autoskalowanie. Bez niego kolejki działają „w ciemno" — nie wiesz, co zalega i gdzie pojawiają się błędy.
Ile kosztuje wdrożenie kolejek w Laravel?
Wdrożenie kolejek w istniejącym projekcie to orientacyjnie 2 000–10 000 zł netto + VAT. Migracja na Redis z Horizonem to zwykle 2 000–5 000 zł. W nowych projektach kolejki są częścią standardu i mieszczą się w stawce godzinowej.
Jak obsługiwać nieudane zadania (failed jobs)?
Każde zadanie po przekroczeniu limitu prób trafia do tabeli failed_jobs z pełnym błędem. Monitoruj tę tabelę, alertuj o nowych wpisach i utrzymuj procedurę ponawiania. Przy integracjach kluczowa jest idempotencja — żeby ponowienie nie zdublowało operacji.
Czy kolejki są trudne w utrzymaniu?
Same kolejki nie — trudne bywa ich monitorowanie i obsługa awarii zewnętrznych API. Dlatego w produkcji łączymy kolejki z Horizonem, alertami i procedurami retry. To standard, który opisujemy w usłudze utrzymania i modernizacji kodu.
👉 Twoja aplikacja zwalnia albo gubi zadania przy błędach API? Opisz projekt na kontakt@informatix.com.pl lub przez formularz — wycena jest bezpłatna.
📖 Zobacz również: optymalizacja wydajności aplikacji Laravel, integracje API i webhooki oraz CI/CD i DevOps dla Laravel.