• Как сделать очередь на PHP по работе с CRM системой?

    @qid00000000
    Мало что знаю, но информацию найду в гугле
    Попробуйте сделать так:

    На сервере организуйте хранение очереди (можно в Redis, но на крайний случай, можно и в mysql). Также потребуются функции уточнения статуса задания и скачивания результата.
    (Если crm поддерживает такой формат работы, костылить нужно меньше)
    В противном случае, воркеру придется дожидаться результата запроса. (На shared хостинге, нагрузка превысит пределы)

    Скриптом принимайте запросы и помещайте в очередь.
    Добавьте задание в cron, чтобы из очереди извлекались данные и формировался запрос к удалённому api. Ответ можно поместить в хранилище, а потом забрать конечному пользователю.
    Ответ написан
    Комментировать
  • Как сделать очередь на PHP по работе с CRM системой?

    @dzhebrak
    Готовых вариантов для динамического создания воркеров, к сожалению, нет (или по крайней мере я никогда не сталкивался с такими). Можно сделать следующим образом.

    В базе данных сделайте таблицу для очереди, в которой одним из столбцов будет номер аккаунта клиента.
    При получении вебхука не обрабатывайте (т.е. не делайте запросы к crm) его сразу, а только сохраняйте в вышеуказанную таблицу.
    Напишите скрипт, который будет запускаться раз в минуту по крону. Этот скрипт должен получить уникальные аккаунты (DISTINCT) из таблицы очереди и запустить все обработчики, каждый из которых будет обрабатывать только 1 аккаунт клиента (т.е. аккаунт передается обработчику как аргумент). Запускать нужно как фоновый процесс (&). Можно перед запуском проверять, не запущены ли они уже, или сделать это на следующем шаге.
    Обработчик при старте проверяет, не запущен ли другой его экземпляр для этого же клиента. Затем до тех пор, пока есть записи в очереди именно для этого аккаунта, скрипт получает по 7 записей для этого аккаунта, и по ним делает 7 одновременных запросов к api crm с помощью guzzle docs.guzzlephp.org/en/stable/quickstart.html#concu... , после чего удаляет записи из очереди.

    Альтернативным вариантом будет использование очереди вроде RabbitMQ вместо базы данных. Нужно будет в exchange создать очередь для каждого аккаунта клиента, и также скриптом по крону получать информацию по тому, какие есть очереди и запускать обработчиков. Первый способ, на мой взгляд, проще, да и его будет достаточно, если вы не обрабатываете миллионы записей ежедневно.
    Ответ написан
    3 комментария
  • Как сделать очередь на PHP по работе с CRM системой?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    В Yii2 есть Yii-quque
    Ответ написан
    Комментировать