В Laravel 13.26 завезли полезную мелочь для очередей

В Laravel 13.26 завезли полезную мелочь для очередей


Laravel выпустил 13.26, и среди изменений мне особенно понравился DebounceFor для queued listeners.

Смысл простой: если одно и то же событие прилетает много раз подряд, можно не запускать пачку почти одинаковых задач, а немного подождать и обработать уже финальное состояние.

Простой пример: в админке несколько раз подряд меняют один и тот же товар — название, цену, описание, потом ещё что-то поправляют. Без такой логики в очередь могут улететь несколько одинаковых обновлений поискового индекса. Хотя по факту нужен только результат последнего изменения.

Что здесь происходит


DebounceFor(30): Laravel ждёт 30 секунд после последнего события. Если за это время приходит ещё одно такое же событие, отсчёт начинается заново.

maxWait: 120: ограничивает общее ожидание двумя минутами. Даже если события продолжают сыпаться без остановки, актуальная задача всё равно получит возможность выполниться максимум через 120 секунд с начала этой серии.

debounceId(): нужен, чтобы Laravel понимал, какие события объединять. В примере используется ID товара, поэтому изменения одного товара группируются вместе, а другого — отдельно.

Разумеется, debounce существовал как концепция задолго до Laravel 13.26.

И при необходимости такую механику никто не мешал написать самостоятельно: кеш, блокировки, таймеры, идентификаторы, обработка граничных случаев. А теперь для типового случая есть понятная встроенная механика.

Не самая громкая фича Laravel 13.26, зато вполне практичная 😉


#разбор #backend #процессы

Бесплатный
Комментарии
avatar
Здесь будут комментарии к публикации