#backend #php
Для того чтобы пользователь не ждал завершения тяжелых интеграционных операций, лучше исполнять их в фоновом режиме. Например, отправки email-письма через внешний SMTP-сервер или получения курса валют из системы внутреннего контура банка.
В зависимости от ситуации мы применяем различные механики запуска процессов в фоне, но в большинстве своем они сводятся к организации очередей обработки и к работе с брокерами сообщений.
В простейшем случае очередь сообщений можно организовать на одной таблице в реляционной БД, в которую добавлять записи с действиями для обработки и удалять (помечать выполненными) при завершении этой обработки. Для каждого современного фреймворка существуют расширения или composer-пакеты, реализующие работу с очередями.
Например, для Yii расширение yii2-queue включено в ядро фреймворка. Такие расширения поддерживают современные драйверы очередей, основанные на работе с RDBMS, Redis, RabbitMQ, Beanstalk, Gearman и т.д.
Отходя от фреймворков, рассмотрим, как в простейшем случае организовать работу с еще одним, более продвинутым, распределенным, журналируемым диспетчером сообщений — Apache Kafka.
Для быстрого запуска инфраструктуры, опишем сервисы, необходимые для работы Apache Kafka в docker-compose.yml. Допустим, что контейнер консольного PHP-приложения строится на образе php:7.3-cli-alpine. Тогда для взаимодействия c Apache Kafka нам необходимо дополнить этот образ специальным расширением-клиентом php-rdkafka.
Теперь осталось сделать простейшую реализацию механизма отправки и получения сообщений. В рамках пилотной настройки небольшой простейший сервис обмена сообщениями на основе Apache Kafka готов.
З.Ы. Для обеспечения подсветки синтаксиса в IDE при работе с классами
RdKafka можно в зависимости проекта добавить stubs-пакет.