Skip to content

ditrake/bxrequestqueue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 

Repository files navigation

Bxrequestqueue

Модуль для управления очередью запросов к внешним сервисам.

Необходим, когда сервер внешнего ресурса не может принять количество запросов, генерируемых сайтом. В моем случа 10 rps - это уже был предел

Оглавление

Установка

  1. Скачайте архив с репозиторием.
  2. Скопируйте папку razout.bxrequestqueue из архива репозитория в папку local/modules вашего проекта.
  3. Установите модуль в административном разделе 1С-Битрикс "Управление сайтом".

Использование

Общий алгоритм такой:

  1. Генерируем запрос;
  2. Добавляем его в очередь, получаем ID записи;
  3. При получении ответа, записываем его и меняем статус записи;
  4. Проверяем, если ответ уже лежит в базе, то забираем и подчищаем за собой.

Выглядит это примерно следующим образом:

//формируем опции для запроса
$query = json_encode($options);

//Добавляем запрос в очередь
$queue = new CQueue();
$queue->Add($query, $request_name, $callback, $callback_params);

Дальше любым удобным для Вас образом реализуем функция вытаскивания из очереди, запроса и запись ответа. К примеру у меня были две функции. выполняемые на хитах и агент на кроне.

public static function CronCheckQueue()
    {
        $queue = new CQueue();

        $time_start = time();
        do {
            //хватаем верхний
            $item = $queue->ShiftQueue();
            
            //если можем выполнять, то приступаем
            if ($queue->CheckQueue() && $item) {
              
                //предварительно меняем статус
                $queue->ChangeQueue(true, $item['ID']);
             
                //выполняем сам запрос
                $result = ...;
             
                //записываем результат
                $queue->QueueItemUpdate($item['ID'], $result);
             
                //меняем статус
                $queue->ChangeQueue(false, $item['ID']);
                sleep(1);
            }
        } while ((time() - $time_start) < 30);
        return "CPayment::CronCheckQueue();";
    }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages