PHPackages                             proklung/bitrix.redis.module - 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. [Caching](/categories/caching)
4. /
5. proklung/bitrix.redis.module

ActiveBitrix-d7-module[Caching](/categories/caching)

proklung/bitrix.redis.module
============================

Поддержка очередей Redis (и не только) в Битриксе

1.1.7(4y ago)88MITPHPPHP &gt;=7.1 || ^8.0

Since Jul 14Pushed 4y ago1 watchersCompare

[ Source](https://github.com/ProklUng/bitrix.redis.module)[ Packagist](https://packagist.org/packages/proklung/bitrix.redis.module)[ Docs](https://github.com/ProklUng/bitrix.redis.module)[ RSS](/packages/proklung-bitrixredismodule/feed)WikiDiscussions master Synced today

READMEChangelog (10)Dependencies (15)Versions (19)Used By (0)

Модуль для Битрикса, организующий работу с очередями через Redis (и не только)
==============================================================================

[](#модуль-для-битрикса-организующий-работу-с-очередями-через-redis-и-не-только)

Поддерживаемый транспорт:

- Redis
- RabbitMq
- Filesystem
- DBAL

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

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

composer.json основного проекта:

```
  "extra": {
    "installer-paths": {
      "./bitrix/modules/{$name}/": ["type:bitrix-d7-module", "type:bitrix-module"],
      "./bitrix/components/{$name}/": ["type:bitrix-d7-component", "type:bitrix-component"],
      "./bitrix/templates/{$name}/": ["type:bitrix-d7-template", "type:bitrix-theme"]
    }
  }
```

И:

```
    "repositories": [
        {
            "type": "git",
            "url": "https://github.com/proklung/bitrix.redis.module"
        },
        {
          "type": "git",
          "url": "https://github.com/proklung/bitrix.containerable.boilerplate"
        }
    ]
```

```
$ composer require proklung/bitrix-redis-module
```

Установите модуль `proklung.redis` в административном интерфейсе сайта `bitrix/admin/partner_modules.php`

Добавьте следующий код в ваш `init.php`:

```
use Bitrix\Main\Loader;
use Proklung\Redis\DI\Services;

if (Loader::includeModule('proklung.redis')) {
    Services::boot();
}
```

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

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

Конфигурация идентична родительскому пакету. Настройка производится посредством правки файлов `bitrix/.settings.php`и `bitrix/.settings_extra.php`:

```
return [
    'proklung.redis' => [
        'value' => [
            'enqueue' => [
                'default' => [
                    'transport' => 'redis://',
                    'client' => [
                        'default_queue' => 'default',
                        'prefix' => 'redis',
                        'app_name' => 'fedy',
                    ],

                ],
            ],
        ],
    ]
];
```

### Нюансы

[](#нюансы)

- `Консольные команды` - так как в процессе запуска модуля формируется отдельный контейнер, то для запуска команд предлагается отдельный раннер `enqueue`.
- Выпилено все, что касается Doctrine (и все, что относится к `jobs`, т.к. опирается на Доктрину).

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

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

### Producer

[](#producer)

```
use Enqueue\Client\ProducerInterface;

$provider = new Proklung\Redis\DI\Services();
$container = $provider->boot();

/** @var Symfony\Component\DependencyInjection\ContainerInterface $container */

/** @var $producer ProducerInterface $producer */
$producer = $container->get('enqueue.client.default.lazy_producer');

$producer->sendEvent('bitrix-redis', 'REDDIS');
```

### Consumers

[](#consumers)

```
use Interop\Queue\Message;
use Interop\Queue\Context;
use Interop\Queue\Processor;
use Enqueue\Client\TopicSubscriberInterface;

class FooRedisProcessor implements Processor, TopicSubscriberInterface
{
    public function process(Message $message, Context $session)
    {
        file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/redis-bitrix.log', $message->getBody());

        return self::ACK;
        // return self::REJECT; // when the message is broken
        // return self::REQUEUE; // the message is fine but you want to postpone processing
    }

    public static function getSubscribedTopics()
    {
        return ['bitrix-redis'];
    }
}
```

Класс `FooRedisProcessor` должен быть зарегистрирован сервисом (и помечен тэгом `enqueue.topic_subscriber`) в `.settings.php` модуля:

```
return [
    'parameters' => [
        'value' => [
            'cache_path' => '/bitrix/cache/s1/proklung.redis', // Путь к закешированному контейнеру
            'compile_container_envs' => ['dev', 'prod'], // Окружения при которых компилировать контейнер
            'container.dumper.inline_factories' => false, // Дампить контейнер как одиночные файлы
        ],
        'readonly' => false,
    ],
    'services' => [
        'value' => [
            'Proklung\Redis\Samples\FooRedisProcessor' =>
            [
                'className' => \Proklung\Redis\Samples\FooRedisProcessor::class,
                'tags' => ['name' => 'enqueue.topic_subscriber', 'client' => 'default']
            ],
        ],
        'readonly' => false,
    ],
];
```

В целом модуль следует канве оригинального бандла. Основное отличие - способ конфигурирования сервисов (не Yaml, а битриксовые массивные конфиги).

### Кэширование контейнера

[](#кэширование-контейнера)

Параметр `cache_path` - путь, куда ляжет скомпилированный контейнер. Если не задано, то по умолчанию `/bitrix/cache/s1/proklung.redis`.

Предполагается, что в системе так или иначе установлена переменная среды `DEBUG` в массиве `$_ENV`. Если нет, то по умолчанию полагается, что среда "отладочная".

Параметр (массив) `compile_container_envs` указывает окружения, при которых необходимо кэшировать контейнер.

Пока простая логика: `$_ENV["DEBUG"] === true` =&gt; окружение `dev`, иначе `prod`.

CLI
---

[](#cli)

Доступны некоторые команды, которые упрощают работу:

- `enqueue:consume`
- `enqueue:produce`
- `enqueue:setup-broker`
- `enqueue:routes`
- `enqueue:transport:consume`

[Подробнее](https://php-enqueue.github.io/bundle/cli_commands/) в документации оригинального бандла.

В папке `/install/bin` модуля лежит файл `enqueue`. При установке модуля система попробует скопировать его в директорию, `bin`, лежащую двумя уровнями выше `DOCUMENT_ROOT`. Если такой директории не существует, то сделано ничего не будет. Придется создать папку руками и скопировать туда файл вручную.

Запуск:

```
   php bin/enqueue enqueue:setup-broker
```

Все доступные команды:

```
   php bin/enqueue
```

Другие транспорты
-----------------

[](#другие-транспорты)

### RabbitMq

[](#rabbitmq)

#### Настройка

[](#настройка)

`.settings.php` Битрикса:

```
// ... предыдущее

    'proklung.redis' => [
        'value' => [
            'enqueue' => [
                // ... предыдущее
                'rabbit' => [
                    'transport' => 'amqp://',
                    'client' => [
                        'default_queue' => 'default',
                        'prefix' => 'rabbit',
                        'app_name' => 'fedy',
                    ],
                ],
            ]
        ]
    ],
```

Все по аналогии с Redis или файловой системой. Важно первый раз не забыть запустить `setup-broker`:

```
php bin/enqueue enqueue:setup-broker --client=rabbit
```

#### Получение сообщений

[](#получение-сообщений)

```
php bin/enqueue enqueue:consume --client=rabbit
```

Где `rabbit` - название клиента, определяемое в `.settings.php` Битрикса.

### DBAL

[](#dbal)

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

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

Дабы не отягощать модуль зависимостями - `enqueue/dbal` не включен в стандартный `composer.json`. Для использования этого транспорта нужно самолично запустить `composer require enqueue/dbal` в конечном проекте.

#### Настройка

[](#настройка-1)

`.settings.php` Битрикса:

```
// ... предыдущее

    'proklung.redis' => [
        'value' => [
            'enqueue' => [
                // ... предыдущее
                'dbal' => [
                    'transport' => 'mysql://root:@localhost/bitrix.loc',
                    'client' => [
                        'default_queue' => 'default',
                        'prefix' => 'dbal',
                        'app_name' => 'fedy',
                    ],
                ],
            ]
        ]
    ],
```

Все по аналогии с Redis или файловой системой. Важно первый раз не забыть запустить `setup-broker` (будет создана таблица `enqueue`):

```
php bin/enqueue enqueue:setup-broker --client=dbal
```

#### Получение сообщений

[](#получение-сообщений-1)

```
php bin/enqueue enqueue:consume --client=dbal
```

Где `dbal` - название клиента, определяемое в `.settings.php` Битрикса.

### Файловая система

[](#файловая-система)

#### Настройка

[](#настройка-2)

`.settings.php` Битрикса:

```
// ... предыдущее

    'proklung.redis' => [
        'value' => [
            'enqueue' => [
                // ... предыдущее
                'filesystem' => [
                    // $_SERVER['DOCUMENT_ROOT'] - важно!
                    'transport' => 'file:///' . $_SERVER['DOCUMENT_ROOT'] . '/bitrix/cache/s1/fs',
                    'client' => [
                        'default_queue' => 'default',
                        'prefix' => 'fs',
                        'app_name' => 'fedy',
                    ],
                ],
            ]
        ]
    ],
```

#### Клиент

[](#клиент)

Класс:

```
use Interop\Queue\Message;
use Interop\Queue\Context;
use Interop\Queue\Processor;
use Enqueue\Client\TopicSubscriberInterface;

class FooFsProcessor implements Processor, TopicSubscriberInterface
{
    public function process(Message $message, Context $session)
    {
        file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/fs-bitrix.log', $message->getBody());

        return self::ACK;
    }

    public static function getSubscribedTopics()
    {
        return ['bitrix-fs'];
    }
}
```

`.settings.php` модуля:

```
return [
    'services' => [
        'value' => [
            // ... предыдущие клиенты
            'Proklung\Redis\Samples\FooFsProcessor' => [
                    'className' => \Proklung\Redis\Samples\FooFsProcessor::class,
                    'tags' => ['name' => 'enqueue.topic_subscriber', 'client' => 'filesystem']
            ],
        ],
        'readonly' => false,
    ],
];
```

#### Отправка сообщений

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

```
$services = new Proklung\Redis\DI\Services();
$container = $services->boot();

$producerFs = $container->get('enqueue.client.filesystem.lazy_producer');
$producerFs->sendEvent('bitrix-fs', 'FS');
```

#### Получение сообщений

[](#получение-сообщений-2)

```
php bin/enqueue enqueue:consume --client=filesystem
```

Где `filesystem` - название клиента, определяемое в `.settings.php` Битрикса.

Или так:

```
/** @var Context $context */
$context = $container->get('enqueue.transport.filesystem.context');

$fooQueue = $context->createQueue('fs.fedy.default'); // См. .settings.php, свойства клиента.
$consumer = $context->createConsumer($fooQueue);
$message = $consumer->receiveNoWait(); // Для примера, чтобы скрипт не зацикливался. В нормальной среде - $consumer->receive().

$consumer->acknowledge($message);
```

Credits
-------

[](#credits)

Данный модуль представляет собой адаптацию [пакета](https://github.com/php-enqueue/enqueue-bundle) для работы в среде Битрикс.

Оригинальная [документация](https://php-enqueue.github.io/symfony) валидна, за исключением некоторых нюансов.

###  Health Score

29

—

LowBetter than 57% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity65

Established project with proven stability

 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 ~2 days

Recently: every ~9 days

Total

18

Last Release

1778d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9210c86ee6734e537eaf22c0f2fe7a965451e340e39e1aae2b74013f24c2660d?d=identicon)[gedovan](/maintainers/gedovan)

---

Top Contributors

[![ProklUng](https://avatars.githubusercontent.com/u/19857467?v=4)](https://github.com/ProklUng "ProklUng (21 commits)")

---

Tags

ampqbitrixbitrix-moduledbalphpphp7queueredisbitrixbitrix-cmsbitrix-modulebitrix-d7

### Embed Badge

![Health badge](/badges/proklung-bitrixredismodule/health.svg)

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

###  Alternatives

[easycorp/easyadmin-bundle

Admin generator for Symfony applications

4.3k17.9M388](/packages/easycorp-easyadmin-bundle)[prestashop/prestashop

PrestaShop is an Open Source e-commerce platform, committed to providing the best shopping cart experience for both merchants and customers.

9.1k17.8k](/packages/prestashop-prestashop)[drupal/core

Drupal is an open source content management platform powering millions of websites and applications.

21866.0M1.7k](/packages/drupal-core)[symfony/security-bundle

Provides a tight integration of the Security component into the Symfony full-stack framework

2.5k185.6M2.3k](/packages/symfony-security-bundle)[symfony/security-http

Symfony Security Component - HTTP Integration

1.7k177.2M379](/packages/symfony-security-http)[api-platform/core

Build a fully-featured hypermedia or GraphQL API in minutes!

2.6k51.2M337](/packages/api-platform-core)

PHPackages © 2026

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