Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Поддержка очередей Redis (и на RabbitMq, и на Filesystem, и через DBAL) в Битриксе

License

NotificationsYou must be signed in to change notification settings

ProklUng/bitrix.redis.module

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

  • 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:

useBitrix\Main\Loader;useProklung\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

useEnqueue\Client\ProducerInterface;$provider =newProklung\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

useInterop\Queue\Message;useInterop\Queue\Context;useInterop\Queue\Processor;useEnqueue\Client\TopicSubscriberInterface;class FooRedisProcessorimplements Processor, TopicSubscriberInterface{publicfunctionprocess(Message$message,Context$session)    {file_put_contents($_SERVER['DOCUMENT_ROOT'] .'/redis-bitrix.log',$message->getBody());returnself::ACK;// return self::REJECT; // when the message is broken// return self::REQUEUE; // the message is fine but you want to postpone processing    }publicstaticfunctiongetSubscribedTopics()    {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 => окружениеdev, иначеprod.

CLI

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

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

Подробнее в документации оригинального бандла.

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

Запуск:

   php bin/enqueue enqueue:setup-broker

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

   php bin/enqueue

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

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

Установка

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

Настройка

.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

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

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

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

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

Настройка

.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',                    ],                ],            ]        ]    ],

Клиент

Класс:

useInterop\Queue\Message;useInterop\Queue\Context;useInterop\Queue\Processor;useEnqueue\Client\TopicSubscriberInterface;class FooFsProcessorimplements Processor, TopicSubscriberInterface{publicfunctionprocess(Message$message,Context$session)    {file_put_contents($_SERVER['DOCUMENT_ROOT'] .'/fs-bitrix.log',$message->getBody());returnself::ACK;    }publicstaticfunctiongetSubscribedTopics()    {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 =newProklung\Redis\DI\Services();$container =$services->boot();$producerFs =$container->get('enqueue.client.filesystem.lazy_producer');$producerFs->sendEvent('bitrix-fs','FS');

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

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

Данный модуль представляет собой адаптациюпакета для работыв среде Битрикс.

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

About

Поддержка очередей Redis (и на RabbitMq, и на Filesystem, и через DBAL) в Битриксе

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp