Настройка очередей задач на 1С-Битрикс: полное руководство

Настройка очередей задач на 1С-Битрикс Представьте: обмен с 1С падает по таймауту, email-рассылка на 5000 подписчиков блокирует хит, генерация PDF-прайса для 20 000 товаров кладёт сервер. Все эти задачи объединяет одно: их нельзя выполнять в HTTP-запросе. Нужна очередь — механизм, который принима
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Настройка очередей задач на 1С-Битрикс: полное руководство
Простой
~1 день

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1460
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    764
  • Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    882
  • Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    809
  • Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1165

Настройка очередей задач на 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-блока

Простейшая реализация без внешних зависимостей:

  1. HL-блок QueueJob — поля: UF_HANDLER (класс-обработчик), UF_PAYLOAD (JSON с параметрами), UF_STATUS (pending/processing/done/failed), UF_ATTEMPTS (количество попыток), UF_CREATED_AT, UF_PROCESSED_AT.
  2. Постановка задачи — QueueJobTable::add(['UF_HANDLER' => 'ImportHandler', 'UF_PAYLOAD' => json_encode($data), 'UF_STATUS' => 'pending']). Используйте D7 ORM — это стандарт для Битрикс.
  3. Обработчик (cron-скрипт) — запускается каждую минуту, выбирает N задач со статусом pending, переводит в processing, выполняет, помечает done или failed.

Преимущества: retry (повторные попытки по UF_ATTEMPTS), мониторинг (SQL-запрос к HL-блоку), приоритеты (добавить поле UF_PRIORITY).

Как настроить очередь на HL-блоке: пошаговая инструкция

  1. Создайте HL-блок QueueJob с полями: UF_HANDLER (строка), UF_PAYLOAD (текст), UF_STATUS (список: pending, processing, done, failed), UF_ATTEMPTS (число), UF_CREATED_AT (дата), UF_PROCESSED_AT (дата).
  2. Добавьте индекс на поле UF_STATUS для быстрой выборки pending-задач.
  3. Напишите класс-обработчик с методом run($payload), который возвращает true/false.
  4. Создайте cron-скрипт, который каждую минуту выбирает до 10 задач со статусом pending, переводит их в processing, вызывает обработчик, и при успехе помечает done, при ошибке — failed с инкрементом attempts.
  5. Защитите скрипт от параллельного запуска через 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. Закажите предварительный аудит, чтобы узнать точные сроки и стоимость под ваш сценарий. Получите детальный план оптимизации очередей — бесплатно на вводном звонке.