Я рассматриваю возможность использования RabbitMQ для некоторой асинхронной обработки в моем новом приложении.
Одна из проблем, с которой я сталкиваюсь, заключается в том, как лучше всего обрабатывать подключения к базе данных. Я буду использовать Eloquent и PDO.
Один ресурс, который я нашел в Интернете здесь https://www.teqneers.de/2013/10/simple-spawn-rabbitmq-consumers-with-php/ предлагает порождать новый процесс, используя proc_open
но я не очень доволен этим подходом и задаюсь вопросом, есть ли лучший подход.
Я также пытался найти лучшие практики для обработки соединения с базой данных в PHP-демоне, но ничего не нашел.
Некоторые вещи, о которых я думал.
Создание нового соединения и закрытие его для каждого сообщения
Поддерживать связь на протяжении всей жизни потребителя и часто убивать его
Запуск работника в командной строке
Я также думал о постоянных связях, но после прочтения о них кажется, что они не те, о которых я думал. Кроме того, многие посты говорят, что это плохая идея в любом случае.
Я понимаю, что PHP, возможно, не лучшая работа для этого, но я быстро создаю прототипы, и PHP — это язык, на котором мне удобнее всего выполнять эту задачу.
Я был бы очень признателен, если бы мог получить совет о том, как справиться с этим.
Благодарю.
Поэтому я решил пойти с решением, которое является объединением proc_open
(без фактического использования proc_open
) и варианты 1 и 2.
С помощью https://github.com/ricbra/rabbitmq-cli-consumer, этот инструмент cli обрабатывает фактическое потребление сообщений и передает его в сценарий PHP через командную строку (работает как прокси-сервер).
Сценарий PHP запускается один раз для каждого сообщения и возвращается в зависимости от кода выхода (0: успешно, 1: ошибка), обрабатывается сообщение ACK.
Скрипт работает как обычный PHP-скрипт в CLI, так что вы не забываете об обработке ресурсов. Здесь нет демона.
Других решений пока нет …