Очереди, которых нет в конфиге: динамические супервизоры Laravel Horizon

Habr ·

Очереди, которых нет в конфиге: динамические супервизоры Laravel Horizon

Очереди задач — одна из тех вещей, которые настраивают один раз и больше не трогают. Конфиг описывает известные потоки фоновых работ, деплой раскатывает его, воркеры поднимаются и делают своё дело. Так работает в подавляющем большинстве проектов. А что если появляется необходимость запускать максимально изолированные задачи, которыми должен управлять пользователь, а не разработчик: создавать, запускать, останавливать? Это единица, которую надо изолировать, появляется и исчезает между деплоями, а единственный способ рассказать об этом системе — отредактировать конфиг и раскатать всё заново. В Laravel Horizon документация заканчивается на конфиге и паре artisan-команд про то, как поднять супервизоры, настроить воркеры, их масштабирование и указать очереди. А что, если нам нужно создать свои собственные очереди и их воркеры в рантайме? Об этом документация молчит. Но если прочитать исходники, выясняется, что конфиг — не единственный источник истины. Это статья про построение динамических очередей поверх статического конфига Laravel Horizon, используя внутренние недокументированные механизмы, которые Horizon сам использует внутри себя. Про архитектуру с автоматическим восстановлением консенсуса, разрешением ошибок и оптимизацией памяти для долго живущих очередей. Читать далее

Очереди задач — одна из тех вещей, которые настраивают один раз и больше не трогают. Конфиг описывает известные потоки фоновых работ, деплой раскатывает его, воркеры поднимаются и делают своё дело. Так работает в подавляющем большинстве проектов. А что если появляется необходимость запускать максимально изолированные задачи, которыми должен управлять пользователь, а не разработчик: создавать, запускать, останавливать? Это единица, которую надо изолировать, появляется и исчезает между деплоями, а единственный способ рассказать об этом системе — отредактировать конфиг и раскатать всё заново. В Laravel Horizon документация заканчивается на конфиге и паре artisan-команд про то, как поднять супервизоры, настроить воркеры, их масштабирование и указать очереди. А что, если нам нужно создать свои собственные очереди и их воркеры в рантайме? Об этом документация молчит. Но если прочитать исходники, выясняется, что конфиг — не единственный источник истины. Это статья про построение динамических очередей поверх статического конфига Laravel Horizon, используя внутренние недокументированные механизмы, которые Horizon сам использует внутри себя. Про архитектуру с автоматическим восстановлением консенсуса, разрешением ошибок и оптимизацией памяти для долго живущих очередей. Читать далее

Источник: Habr