Настройка очередей задач на 1С-Битрикс
Представьте: обмен с 1С падает по таймауту, email-рассылка на 5000 подписчиков блокирует хит, генерация PDF-прайса для 20 000 товаров кладёт сервер. Все эти задачи объединяет одно: их нельзя выполнять в HTTP-запросе. Нужна очередь — механизм, который принимает задачу, кладёт в хранилище и выполняет в фоне через отдельный процесс. Мы занимаемся Битриксом более 10 лет и настроили такие очереди для 50+ проектов — вот как это делается.
Очередь задач — критичный элемент highload-проектов. Без неё каждый долгий процесс блокирует пользовательские запросы, а таймауты приводят к потере данных. Правильная очередь решает три проблемы: гарантирует выполнение, позволяет параллельно обрабатывать сотни задач и даёт механизм retry для сбойных операций. В Битрикс для этого есть несколько путей: от простых агентов до внешних брокеров вроде RabbitMQ.
Штатные механизмы: агенты
Агенты (CAgent) — встроенная система отложенных задач Битрикс. Агент — функция, которая вызывается по расписанию. Регистрация:
CAgent::AddAgent( "MyClass::processQueue();", // PHP-код для выполнения "main", // модуль "N", // не периодический (N) или периодический (Y) 300, // интервал в секундах "", // дата первой проверки "Y", // активность "" // дата первого запуска ); Агенты выполняются двумя способами:
- На хитах (по умолчанию) — при каждом запросе Битрикс проверяет, есть ли агенты, которым пора запуститься. Проблема: если на сайте нет трафика — агенты не выполняются. Если трафик высокий — проверка агентов добавляет нагрузку к каждому хиту.
- На cron — рекомендуемый режим. В
crontabдобавляется строка:*/5 * * * * /usr/bin/php /var/www/bitrix/modules/main/tools/cron_events.php. Параметр в.settings.php:
'agents' => [ 'value' => [ 'use_crontab' => true ] ] Почему агенты на хитах — это плохо?
Агенты на хитах — основная причина падения производительности средних проектов. Каждый HTTP-запрос тратит до 10% времени на проверку и запуск агентов. При 10 000 посетителей в день это приводит к лишним 20 000 вызовам CAgent::CheckAgents() в час. Перевод на cron снижает нагрузку на сервер до 70% и гарантирует выполнение даже при нулевом трафике.
| Способ выполнения | Зависимость от трафика | Нагрузка на сервер | Точность расписания |
|---|---|---|---|
| На хитах | Да | Высокая | Низкая |
| На cron | Нет | Низкая | Высокая |
Когда агентов недостаточно
Агенты — однопоточные. Один агент выполняется, остальные ждут. Если агент импорта данных работает 10 минут — все остальные агенты (отправка писем, пересчёт кеша, обмен с 1С) задерживаются. Для проектов с интенсивной фоновой обработкой — нужна полноценная очередь.
Очередь на базе highload-блока
Простейшая реализация без внешних зависимостей:
-
HL-блок
QueueJob— поля:UF_HANDLER(класс-обработчик),UF_PAYLOAD(JSON с параметрами),UF_STATUS(pending/processing/done/failed),UF_ATTEMPTS(количество попыток),UF_CREATED_AT,UF_PROCESSED_AT. - Постановка задачи —
QueueJobTable::add(['UF_HANDLER' => 'ImportHandler', 'UF_PAYLOAD' => json_encode($data), 'UF_STATUS' => 'pending']). Используйте D7 ORM — это стандарт для Битрикс. - Обработчик (cron-скрипт) — запускается каждую минуту, выбирает N задач со статусом
pending, переводит вprocessing, выполняет, помечаетdoneилиfailed.
Преимущества: retry (повторные попытки по UF_ATTEMPTS), мониторинг (SQL-запрос к HL-блоку), приоритеты (добавить поле UF_PRIORITY).
Как настроить очередь на HL-блоке: пошаговая инструкция
- Создайте HL-блок
QueueJobс полями:UF_HANDLER(строка),UF_PAYLOAD(текст),UF_STATUS(список: pending, processing, done, failed),UF_ATTEMPTS(число),UF_CREATED_AT(дата),UF_PROCESSED_AT(дата). - Добавьте индекс на поле
UF_STATUSдля быстрой выборки pending-задач. - Напишите класс-обработчик с методом
run($payload), который возвращает true/false. - Создайте cron-скрипт, который каждую минуту выбирает до 10 задач со статусом pending, переводит их в processing, вызывает обработчик, и при успехе помечает done, при ошибке — failed с инкрементом attempts.
- Защитите скрипт от параллельного запуска через flock.
Внешние брокеры: RabbitMQ, Redis
Для высоконагруженных проектов:
-
RabbitMQ — подключение через
php-amqplib. Producer в Битрикс ставит задачу в очередь, Consumer — отдельный PHP-демон, который слушает очередь и выполняет задачи. Пропускная способность — до 10 000 задач в минуту. -
Redis — через
LPUSH/BRPOP. Проще RabbitMQ, достаточно для большинства сценариев. Интеграция с Битрикс: producer регистрируется как обработчик события (например,OnSalePayOrder), consumer запускается через Supervisor.
Сравнение методов: HL-блок vs RabbitMQ vs Redis
| Критерий | HL-блок | RabbitMQ | Redis |
|---|---|---|---|
| Внешние зависимости | Нет | RabbitMQ-сервер | Redis-сервер |
| Нагрузка | До 500 задач/мин | 10 000+ задач/мин | 5 000+ задач/мин |
| Retry | Ручная реализация | Встроенный механизм | Через BLPOP |
| Мониторинг | SQL-запросы | Management UI | Использовать RedisMonitor |
По нашим тестам, очередь на HL-блоке обрабатывает задачи в 3-5 раз быстрее, чем агенты на хитах, а RabbitMQ — ещё в 2 раза быстрее HL-блока.
Что входит в настройку очереди
- Миграция агентов с хитов на cron с корректировкой интервалов
- Проектирование HL-блока или выбор внешнего брокера под вашу нагрузку
- Разработка обработчика очереди с retry и логированием
- Настройка Supervisor для потребителей RabbitMQ/Redis
- Асинхронный запуск бизнес-процессов (Bizproc) через очередь
- Мониторинг: алерт при скоплении более 50 необработанных задач
- Документация по эксплуатации и обучение вашей команды
- Поддержка после релиза 30 дней
Почему мы и как оцениваем проект
Наши инженеры работают с Битриксом с версии 10, выполнили более 50 проектов по оптимизации фоновых процессов. Снижаем нагрузку на сервер до 70%, ускоряем обработку задач в 10 раз. Экономия на серверных мощностях может достигать $1.8k–2.6k в год. Стоимость настройки очереди — от $300–900 в зависимости от сложности. Источник: официальная документация Битрикс — Настройка агентов.
Свяжитесь с нами для консультации по вашему проекту. Мы оценим нагрузку и предложим оптимальное решение — будь то HL-блок или RabbitMQ. Закажите предварительный аудит, чтобы узнать точные сроки и стоимость под ваш сценарий. Получите детальный план оптимизации очередей — бесплатно на вводном звонке.







