RabbitMQ PHP соединение с базой данных потребителей

Я рассматриваю возможность использования RabbitMQ для некоторой асинхронной обработки в моем новом приложении.

Одна из проблем, с которой я сталкиваюсь, заключается в том, как лучше всего обрабатывать подключения к базе данных. Я буду использовать Eloquent и PDO.

Один ресурс, который я нашел в Интернете здесь https://www.teqneers.de/2013/10/simple-spawn-rabbitmq-consumers-with-php/ предлагает порождать новый процесс, используя proc_open но я не очень доволен этим подходом и задаюсь вопросом, есть ли лучший подход.

Я также пытался найти лучшие практики для обработки соединения с базой данных в PHP-демоне, но ничего не нашел.

Некоторые вещи, о которых я думал.

  1. Создание нового соединения и закрытие его для каждого сообщения

    • Минусы: приложение предназначено для доставки сообщений для массовых сообщений, и потребители будут многочисленными и часто запускаются. Может быть ресурсоемким.
    • Плюсы: Тем не менее, традиционные сценарии php работают аналогичным образом, так что это не может быть плохой идеей
  2. Поддерживать связь на протяжении всей жизни потребителя и часто убивать его

    • Минусы: очевидно расточительный. Необходимо постоянно проверять, активно ли соединение.
  3. Запуск работника в командной строке

    • Минусы: слишком много движущихся частей. Необходимо проанализировать ответ для сообщения ACKS, поэтому потребителю нужно дождаться окончания работы. Означает создание и закрытие соединений для каждого сообщения, может также придерживаться варианта 1, поскольку в нем меньше частей.

Я также думал о постоянных связях, но после прочтения о них кажется, что они не те, о которых я думал. Кроме того, многие посты говорят, что это плохая идея в любом случае.

Я понимаю, что PHP, возможно, не лучшая работа для этого, но я быстро создаю прототипы, и PHP — это язык, на котором мне удобнее всего выполнять эту задачу.

Я был бы очень признателен, если бы мог получить совет о том, как справиться с этим.

Благодарю.

0

Решение

Поэтому я решил пойти с решением, которое является объединением proc_open (без фактического использования proc_open) и варианты 1 и 2.

С помощью https://github.com/ricbra/rabbitmq-cli-consumer, этот инструмент cli обрабатывает фактическое потребление сообщений и передает его в сценарий PHP через командную строку (работает как прокси-сервер).

Сценарий PHP запускается один раз для каждого сообщения и возвращается в зависимости от кода выхода (0: успешно, 1: ошибка), обрабатывается сообщение ACK.

Скрипт работает как обычный PHP-скрипт в CLI, так что вы не забываете об обработке ресурсов. Здесь нет демона.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]