Download the PHP package ilepilin/queue without Composer
On this page you can find all versions of the php package ilepilin/queue. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download ilepilin/queue
More information about ilepilin/queue
Files in ilepilin/queue
Package queue
Short Description PHP AMQP Facade
License MIT
Homepage https://bitbucket.org/ilepilin/queue
Informations about the package queue
PHP AMQP FACADE
Модуль для работы с очередями RabbitMQ.
Основные особенности
Модуль позволяет выполнять отложенные вычисления и передавать информацию как в рамках одного проекта, так и между проектами.
Модуль не привязан к каким-либо фреймворкам и для его работы требуется только PHP 5.4 или выше с расширениями bcmath
и pdo_mysql
.
Отказоустойчивость
Для обеспечения отказоустойчивости, модуль поддерживает возможность работы с разными драйверами очередей одновременно.
Драйвер, указанный первым по счету в конфиге, будет использоваться в качестве основного. Все остальные в качестве резервных.
В модуле есть драйверы RabbitMQ и MySQL. Если необходимо добавить свой драйвер, его нужно указать в конфигурации QueueFacade
и он должен реализовывать интерфейс DriverInterface
.
Передача сообщений между проектами
Чтобы передавать сообщения из одного проекта в другой, они должны быть подключены к одному серверу rabbitmq (и иметь общий коннект к MySQL для резервной очереди).
Может возникнуть проблема, что пространства имен у классов Payload отличаются в разных проектах. Чтобы избежать ошибок, нужно ассоциировать класс Payload проекта, в котором отправляются сообщения, с идентичным классом Payload проекта, в котором принимаются сообщения.
Это можно сделать при помощи свойства payloadMap
в конфигурации драйверов проекта, где соощения принимаются:
Начало работы
Для работы модуля требуется:
- rabbitmq-server - RabbitMQ сервер;
- mysql - База данных MySQL;
Установка
Для установки модуля необходимо добавить пакет в composer
Или добавить строчку в файл composer.json и запустить обновление
Конфигурирование
Основной компонент модуля, QueueFacade, можно использовать как синглтон и обращаться к нему через Service Locator.
Ниже приведен пример конфигурации для проекта на фреймворке Yii2:
В текущем примере устанавливаются 2 драйвера:
- RabbitMQ в качестве основного;
- MySQL в качестве резервного.
Использование
Сконфигурированный QueueFacade, по примеру выше, можно удобно использовать следующим образом:
Добавление в очередь
Извлечение из очереди
Пример обработки сообщений из очереди:
В методе handle()
Listener будет пытаться получить самое старое сообщение через указанный драйвер.
Если не указать драйвер, то будет использоваться тот, который указан первым в конфиге - в данном случае это RabbitMQ.
После успешного получения сообщения, Listener отправит его в обработку, передав в $worker->work()
.
Фоновая обработка сообщений
В файле daemon.php находится пример демона для обработки сообщений из очереди.
Запускается через CLI, в первом аргументе необходимо передать название канала.
Для удобного контроля за демонами, рекомендуется использовать supervisord.
Для этого, необходимо на каждый демон создать конфиг в /etc/supervisord.d/conf.d/
После добавления конфига, можно запускать следующей командой:
Обработка сообщений резервной очереди
Обработку сообщений резервной очереди можно осуществлять по крону.
Пример скрипта, выполняемого по крону, для отправки сообщений из резервной очереди в основную:
Лицензия
Copyright (c) 2019 Lepilin Igor
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, а также лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ, ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.