Простой способ организовать очередь при написании PHP-кода для Битрикс24

Теме очереди в PHP посвящено множество статей — см. например описание подхода с использования worker.

Сам я столкнулся со следующей проблемой при интеграции Битрикс24 с одной из систем бронирования мероприятий, требующей организации очереди в PHP: при закрытии мероприятия система отправляла вебхук с данными о каждом участнике, при чем делала это одномоментно по всем участникам. В результате не отрабатывал участок кода, отвечавший за добавление контактов-участников мероприятия во множественное поле сделки из-за очевидной блокировки.

Долго думал над организацией очереди запросов. Рассматривал, в том числе, решение с промежуточным регистром сведений участников, который будет обрабатывать процедура на cron интервал с секунду по каждой записи. Но нашел более простое решение: в начало вебхука была добавлено команда sleep с переменной выбираемой случайным образом от 1 до 60ти.

$sleeptimefirst = rand(1,60);
sleep($sleeptimefirst);

С учетом того, что число участников мероприятий не превышает 8ми это оказалось вполне достаточным для решения проблем с блокировкой!

Если у вас возникли сложности с самостоятельным решением любой задачи по доработке портала, оставьте заявку в форме обратной связи.