Laravel 13.18.0 приносить важливі покращення для роботи з чергами, планувальником завдань та інструментами розробки. Оновлення включає метрики воркерів, коректне завершення процесів за сигналами, пріоритетну систему реєстрації команд та виправлення критичних помилок у Number-хелперах.
Метрики воркерів у події WorkerStopping
Подія WorkerStopping тепер передає дві додаткові метрики, які описують роботу воркера перед його зупинкою: jobsProcessed - кількість оброблених завдань протягом життєвого циклу воркера, та lastJobProcessedAt - мікросекундна мітка часу останнього обробленого завдання. Обидві метрики заповнюються незалежно від того, зупинився воркер штатно чи був примусово завершений.
use Illuminate\Queue\Events\WorkerStopping;
Event::listen(function (WorkerStopping $event) {
$event->jobsProcessed; // int|null
$event->lastJobProcessedAt; // int|float|null (microtime), null якщо нічого не оброблено
});
Це дає змогу записувати продуктивність кожного воркера або відправляти метрики при завершенні демона без необхідності інструментувати цикл обробки завдань самостійно. Якщо воркер зупиняється до обробки будь-яких завдань, lastJobProcessedAt залишається null.
Коректне завершення для schedule:work
Команда schedule:work тепер перехоплює сигнали SIGINT, SIGTERM та SIGQUIT. При отриманні сигналу вона припиняє запуск нових запланованих завдань і чекає завершення поточного процесу schedule:run перед виходом, повторюючи існуючу поведінку queue:work. Це особливо важливо в контейнерних середовищах як Kubernetes, де поди отримують SIGTERM при завершенні, а попередня поведінка могла переривати виконувані завдання.
Пріоритетна реєстрація команд для artisan dev
Команди розробки, зареєстровані для artisan dev, тепер відстежують своє походження (ваш застосунок, vendor-пакет або сам фреймворк) і реєструються з відповідним пріоритетом. Коли кілька команд мають однакову назву, реєстрації з користувацького коду перемагають над vendor-версіями, які в свою чергу мають пріоритет над стандартними командами фреймворка, незалежно від порядку завантаження сервіс-провайдерів.
use Illuminate\Foundation\Console\DevCommands;
DevCommands::artisan('reverb:start --host="0.0.0.0"', 'reverb');
Це замінює попередній підхід з блокуванням автореєстрації vendor-команд на явну систему пріоритетів, тому ваші перевизначення завжди спрацьовують. Крім того, artisan dev тепер запускається з опцією --kill-others-on-fail, тож якщо один процес у групі падає, решта зупиняються замість того, щоб продовжувати працювати.
Захист Number-хелперів від INF/NAN
Методи Number::forHumans() та Number::abbreviate() раніше викидали помилку при передачі значень INF або NAN, і Number::fileSize() мав ту саму проблему. Обидва випадки виправлено, тож ці значення тепер опрацьовуються коректно без викидання винятків.
Інші виправлення та покращення
Версія включає низку додаткових виправлень:
- Додатково зменшено кількість звернень до кешу при використанні debounced jobs
- Виправлено встановлення заголовків кешу для HEAD-запитів
- Заборонено спрацювання події
restored коли відновлення після soft-delete не вдається
- Виправлено серіалізацію параметра
releaseAfter у middleware RateLimited в методі __sleep()
- Усунено колізії міток для
flexible() lock та defer у TaggedCache
- Виправлено парсинг JSON для тіл верхнього рівня з нульовими значеннями
- Додано умовні типи повернення до кількох методів та синхронізовано типи повернення геттерів з дженериками їхніх властивостей
Повний список змін доступний в офіційному changelog та release notes на GitHub.