У Laravel 13.18.0 додали метрики воркерів до події WorkerStopping, реалізували коректну обробку сигналів для schedule:work, запровадили пріоритетність при реєстрації команд artisan dev та випустили низку виправлень для хелперів Number, кешу та планувальника.
- Додано лічильник оброблених джобів та таймстамп останньої операції в подію
WorkerStopping schedule:workтепер перехоплює сигнали завершення та дає активним процесам допрацювати- Пріоритетність реєстрації для dev-команд та прапорець
--kill-others-on-failдляartisan dev Number::forHumans(),Number::abbreviate()таNumber::fileSize()більше не викликають помилок при отриманніINFабоNAN- Умовні типи повернення та синхронізація дженериків для геттерів і властивостей у декількох методах
- Виправлено кеш-заголовки для
HEAD-запитів, оптимізовано читання кешу для debounced jobs та усунуто колізії уTaggedCache
# Що нового
# Метрики воркера у події 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.
Дивіться #60592 та доповнення у #60608.
# Коректне завершення роботи schedule:work
Команда schedule:work тепер реагує на сигнали SIGINT, SIGTERM та SIGQUIT. Отримавши такий сигнал, вона перестає запускати нові заплановані завдання і чекає на завершення вже запущених schedule:run. Ця логіка повторює поведінку queue:work і є критично важливою для контейнерних середовищ на кшталт Kubernetes, де поди отримують SIGTERM при зупинці.
Дивіться #60616.
# Пріоритетність реєстрації dev-команд
Команди для artisan dev тепер враховують джерело походження: ваш застосунок, пакет чи фреймворк. У разі збігу імен пріоритет надається коду користувача, потім — вендорним пакетам і лише потім — стандартам фреймворка, незалежно від черговості завантаження сервіс-провайдерів.
use Illuminate\Foundation\Console\DevCommands;
DevCommands::artisan('reverb:start --host="0.0.0.0"', 'reverb');
Такий підхід з явними пріоритетами замінює блокування автореєстрації вендорів, тому ваші перевизначення завжди будуть діяти. Крім того, artisan dev тепер використовує прапорець --kill-others-on-fail: якщо один процес у групі падає, решта також зупиняється.
# Хелпери Number тепер стійкі до INF та NAN
Методи Number::forHumans(), Number::abbreviate() та Number::fileSize() раніше викликали критичну помилку при отриманні значень INF (нескінченність) або NAN. Це виправлено, і тепер такі вхідні дані обробляються без збоїв.
# Інші виправлення та покращення
- Оптимізовано кількість звернень до кешу для debounced jobs (#60575)
- Виправлено відсутність кеш-заголовків для
HEAD-запитів (#60589) - Подія
restoredбільше не спрацьовує, якщо відновлення після Soft Delete завершилося невдачею (#60605) - Виправлено помилку серіалізації
releaseAfterу методі__sleep()для middlewareRateLimited(#60609) - Усунуто колізії тегів при використанні
flexible()локів уTaggedCache(#60626) - Виправлено парсинг JSON для тіл запитів, що містять лише нуль (#60614)
- Додано умовні типи повернення для низки методів (#60586) та синхронізовано типи геттерів із дженериками властивостей (#60591)
Посилання