PHPackages                             ilepilin/queue - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. ilepilin/queue

ActiveLibrary

ilepilin/queue
==============

PHP AMQP Facade

1.0.1(5y ago)115MITPHPPHP &gt;=5.4.0

Since May 23Pushed 5y ago1 watchersCompare

[ Source](https://github.com/ilepilin/queue)[ Packagist](https://packagist.org/packages/ilepilin/queue)[ Docs](https://bitbucket.org/ilepilin/queue)[ RSS](/packages/ilepilin-queue/feed)WikiDiscussions master Synced 4d ago

READMEChangelog (2)Dependencies (1)Versions (3)Used By (0)

PHP AMQP FACADE
===============

[](#php-amqp-facade)

Модуль для работы с очередями RabbitMQ.

Основные особенности
--------------------

[](#основные-особенности)

Модуль позволяет выполнять отложенные вычисления и передавать информацию как в рамках одного проекта, так и между проектами.

Модуль не привязан к каким-либо фреймворкам и для его работы требуется только PHP 5.4 или выше с расширениями `bcmath` и `pdo_mysql`.

#### Отказоустойчивость

[](#отказоустойчивость)

Для обеспечения отказоустойчивости, модуль поддерживает возможность работы с разными драйверами очередей одновременно.

Драйвер, указанный первым по счету в конфиге, будет использоваться в качестве основного. Все остальные в качестве резервных.

В модуле есть драйверы RabbitMQ и MySQL. Если необходимо добавить свой драйвер, его нужно указать в конфигурации `QueueFacade` и он должен реализовывать интерфейс `DriverInterface`.

#### Передача сообщений между проектами

[](#передача-сообщений-между-проектами)

Чтобы передавать сообщения из одного проекта в другой, они должны быть подключены к одному серверу rabbitmq (и иметь общий коннект к MySQL для резервной очереди).

Может возникнуть проблема, что пространства имен у классов Payload отличаются в разных проектах. Чтобы избежать ошибок, нужно ассоциировать класс Payload проекта, в котором отправляются сообщения, с идентичным классом Payload проекта, в котором принимаются сообщения.

Это можно сделать при помощи свойства `payloadMap` в конфигурации драйверов проекта, где соощения принимаются:

```
'payloadMap' => [
    'libs\queue\component1\Payload' => 'common\components\queue\component1\Payload',
    'libs\queue\component2\Payload' => 'common\components\queue\component2\Payload',
],
```

Начало работы
-------------

[](#начало-работы)

Для работы модуля требуется:

- [rabbitmq-server](https://www.rabbitmq.com/download.html) - RabbitMQ сервер;
- [mysql](https://www.php.net/manual/ru/book.mysql.php) - База данных MySQL;

### Установка

[](#установка)

Для установки модуля необходимо добавить пакет в composer

```
php composer.phar require ilepilin/queue
```

Или добавить строчку в файл composer.json и запустить обновление

```
"ilepilin/queue": "1.*"

```

```
composer update ilepilin
```

### Конфигурирование

[](#конфигурирование)

Основной компонент модуля, QueueFacade, можно использовать как синглтон и обращаться к нему через Service Locator.

Ниже приведен пример конфигурации для проекта на фреймворке Yii2:

```
'components' => [
    ...

    'queue' => [
        'class' => '\ilepilin\queue\QueueFacade',
        'drivers' => [
            [
                'class' => '\ilepilin\queue\driver\RabbitMQ',
                'host' => '127.0.0.1',
                'port' => 5672,
                'user' => 'rabbitmq',
                'password' => '******',
                'payloadMap' => [
                    'libs\queue\component1\Payload' => 'common\components\queue\component1\Payload',
                ],
                'loggerClass' => '\yii\log\Logger',
            ],
            [
                'class' => '\ilepilin\queue\driver\MySQL',
                'username' => 'project_user',
                'password' => '******',
                'host' => '127.0.0.1',
                'port' => 3307, // если порт не стандартный
                'dbname' => 'project_db',
                'payloadMap' => [
                    'libs\queue\component1\Payload' => 'common\components\queue\component1\Payload',
                ],
                'loggerClass' => '\yii\log\Logger',

                // указать true, когда таблица для резервной очереди будет создана.
                // в противном случае, при каждом использовании драйвера будет лишний SQL запрос для проверки существования таблицы
                'isTableCreated' => true,
            ]
        ],
    ],

    ...
]
```

В текущем примере устанавливаются 2 драйвера:

- **RabbitMQ** в качестве основного;
- **MySQL** в качестве резервного.

Использование
-------------

[](#использование)

Сконфигурированный QueueFacade, по примеру выше, можно удобно использовать следующим образом:

### Добавление в очередь

[](#добавление-в-очередь)

```
/** @var \ilepilin\queue\BasePayload $payload */
$payload = new Payload($data);

Yii::$app->queue->push(Worker::channelName(), $payload);
```

### Извлечение из очереди

[](#извлечение-из-очереди)

Пример обработки сообщений из очереди:

```
/** @var \ilepilin\queue\WorkerInterface $worker */
$worker = new \path\to\Worker();

/** @var \ilepilin\queue\QueueFacade $facade */
$facade = Yii::$app->get('queue');

$listener = new \ilepilin\queue\listener\Listener($facade, $worker);
$listener->handle();

// $listener->handle(\ilepilin\queue\driver\MySQL::getCode()); // для резервных очередей
```

В методе `handle()` Listener будет пытаться получить самое старое сообщение через указанный драйвер.

Если не указать драйвер, то будет использоваться тот, который указан первым в конфиге - в данном случае это **RabbitMQ**.

После успешного получения сообщения, Listener отправит его в обработку, передав в `$worker->work()`.

#### Фоновая обработка сообщений

[](#фоновая-обработка-сообщений)

В файле [daemon.php](daemon.php) находится пример демона для обработки сообщений из очереди.

Запускается через CLI, в первом аргументе необходимо передать название канала.

```
php daemon.php channel_name
```

Для удобного контроля за демонами, рекомендуется использовать supervisord.

Для этого, необходимо на каждый демон создать конфиг в /etc/supervisord.d/conf.d/

```
[program:daemon_name]
command=/usr/bin/php -q /path/to/daemon.php channel_name
umprocs=1
autostart=true
autorestart=true
startretries=10
user = user1
group = group1
startsecs = 0
stdout_logfile=/path/to/daemon_name.log
```

После добавления конфига, можно запускать следующей командой:

```
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start demon_name
```

#### Обработка сообщений резервной очереди

[](#обработка-сообщений-резервной-очереди)

Обработку сообщений резервной очереди можно осуществлять по крону.

Пример скрипта, выполняемого по крону, для отправки сообщений из резервной очереди в основную:

```
$channelNames = [
    Worker1::channelName(),
    Worker2::channelName(),
    Worker3::channelName(),
    ...
];

/** @var \ilepilin\queue\QueueFacade $facade */
$facade = Yii::$app->queue;

$driver = $facade->getDriver(\ilepilin\queue\driver\MySQL::getCode());

foreach ($channelNames as $channelName) {
    while ($message = $driver->pop($channelName)) {
        $facade->push($channelName, $message->data, 300);
    }
}
```

Лицензия
--------

[](#лицензия)

Copyright (c) 2019 Lepilin Igor

Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, а также лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:

Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.

ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ, ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~649 days

Total

2

Last Release

1900d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/b9d5c333e841839f666db8208e0fde2afd188194d0f1169bb7c0800b0dc5fa1c?d=identicon)[ilepilin](/maintainers/ilepilin)

---

Top Contributors

[![ilepilin](https://avatars.githubusercontent.com/u/13867125?v=4)](https://github.com/ilepilin "ilepilin (9 commits)")

### Embed Badge

![Health badge](/badges/ilepilin-queue/health.svg)

```
[![Health](https://phpackages.com/badges/ilepilin-queue/health.svg)](https://phpackages.com/packages/ilepilin-queue)
```

###  Alternatives

[magento/community-edition

Magento 2 (Open Source)

12.1k52.1k10](/packages/magento-community-edition)[vladimir-yuldashev/laravel-queue-rabbitmq

RabbitMQ driver for Laravel Queue. Supports Laravel Horizon.

2.1k9.8M30](/packages/vladimir-yuldashev-laravel-queue-rabbitmq)[php-amqplib/rabbitmq-bundle

Integrates php-amqplib with Symfony &amp; RabbitMq. Formerly emag-tech-labs/rabbitmq-bundle, oldsound/rabbitmq-bundle.

1.3k20.1M65](/packages/php-amqplib-rabbitmq-bundle)[bschmitt/laravel-amqp

AMQP wrapper for Laravel and Lumen to publish and consume messages

2752.3M7](/packages/bschmitt-laravel-amqp)[wheelpros/fitment-platform-api

Magento 2 (Open Source)

12.1k1.2k](/packages/wheelpros-fitment-platform-api)[enqueue/amqp-lib

Message Queue Amqp Transport

1078.5M61](/packages/enqueue-amqp-lib)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
