|
| 1 | +# Форк [пакета](https://github.com/yngc0der/bitrix-rabbitmq) |
| 2 | + |
| 3 | +## Зачем? |
| 4 | + |
| 5 | +Оригинальный модуль заточен под битриксовый сервис-локатор, а он встречается только на версиях главного модуля больше, |
| 6 | +чем `20.5.400`. На моих проектах такой свежести нет, а функционал интересный. |
| 7 | + |
| 8 | +## Отличия |
| 9 | + |
| 10 | +Выпилил (частично, пока не касается команд) битриксовый сервис-локатор в пользу отдельного симфонического контейнера. |
| 11 | + |
| 12 | +# Оригинальное readme.MD с некоторыми корректировками |
| 13 | + |
| 14 | +# yngc0der.rabbitmq |
| 15 | + |
| 16 | +## О проекте |
| 17 | + |
| 18 | +Модуль включает в себя обмен сообщениями в вашем php-приложении через [RabbitMQ](http://www.rabbitmq.com/) |
| 19 | +с использованием библиотеки [php-amqplib](http://github.com/php-amqplib/php-amqplib). |
| 20 | + |
| 21 | +Пакет реализует шаблоны обмена сообщениями, приведенными в библиотеке [Thumper](https://github.com/php-amqplib/Thumper), |
| 22 | +что позволяет сделать публикацию сообщений в RabbitMQ из вашего контроллера очень простой: |
| 23 | + |
| 24 | +```php |
| 25 | +use Proklung\RabbitMq\Integration\DI\Services; |
| 26 | + |
| 27 | +$msg = ['user_id' => 1235, 'image_path' => '/path/to/new/pic.png']; |
| 28 | +Services::getInstance()->get('rabbitmq.upload_picture_producer')->publish(serialize($msg)); |
| 29 | +``` |
| 30 | + |
| 31 | +Для получения 50-ти сообщений из очереди `upload_pictures`, вы просто запускаете слушатель: |
| 32 | + |
| 33 | +```php |
| 34 | +use Proklung\RabbitMq\Integration\DI\Services; |
| 35 | + |
| 36 | +$consumer = Services::getInstance()->get('rabbitmq.upload_picture_consumer'); |
| 37 | +$consumer->consume(50); |
| 38 | +``` |
| 39 | + |
| 40 | +Данные примеры требуют запущенного сервера RabbitMQ. |
| 41 | + |
| 42 | +## Минимальные требования |
| 43 | +* `php-7.1.3` или выше |
| 44 | + |
| 45 | +## Установка |
| 46 | +Загрузите пакет, используя пакетный менеджер composer, либо вручную: |
| 47 | + |
| 48 | +```bash |
| 49 | +$ composer require proklung/bitrix-rabbitmq-module |
| 50 | +``` |
| 51 | + |
| 52 | +Установите модуль "proklung.rabbitmq" в административном интерфейсе сайта `bitrix/admin/partner_modules.php` |
| 53 | + |
| 54 | +Добавьте следующий код в ваш `init.php`: |
| 55 | + |
| 56 | +```php |
| 57 | +use Bitrix\Main\Loader; |
| 58 | +use Proklung\RabbitMq\Integration\DI\Services; |
| 59 | + |
| 60 | +if (Loader::includeModule('proklung.rabbitmq')) { |
| 61 | + Services::boot(); |
| 62 | +} |
| 63 | +``` |
| 64 | + |
| 65 | +## Использование |
| 66 | +Конфигурация идентична родительскому пакету. Настройка производится посредством правки файлов `bitrix/.settings.php` |
| 67 | +и `bitrix/.settings_extra.php`: |
| 68 | + |
| 69 | +```php |
| 70 | +return [ |
| 71 | + 'rabbitmq' => [ |
| 72 | + 'value' => [ |
| 73 | + 'connections' => [ |
| 74 | + 'default' => [ |
| 75 | + 'host' => '172.17.0.2', |
| 76 | + 'port' => 5672, |
| 77 | + 'user' => 'guest', |
| 78 | + 'password' => 'guest', |
| 79 | + 'vhost' => '/', |
| 80 | + 'lazy' => false, |
| 81 | + 'connection_timeout' => 3.0, |
| 82 | + 'read_write_timeout' => 3.0, |
| 83 | + 'keepalive' => false, |
| 84 | + 'heartbeat' => 0, |
| 85 | + 'use_socket' => true, |
| 86 | + ], |
| 87 | + ], |
| 88 | + 'producers' => [ |
| 89 | + 'upload_picture' => [ |
| 90 | + 'connection' => 'default', |
| 91 | + 'exchange_options' => [ |
| 92 | + 'name' => 'upload_picture', |
| 93 | + 'type' => 'direct', |
| 94 | + ], |
| 95 | + ], |
| 96 | + ], |
| 97 | + 'consumers' => [ |
| 98 | + 'upload_picture' => [ |
| 99 | + 'connection' => 'default', |
| 100 | + 'exchange_options' => [ |
| 101 | + 'name' => 'upload_picture', |
| 102 | + 'type' => 'direct', |
| 103 | + ], |
| 104 | + 'queue_options' => [ |
| 105 | + 'name' => 'upload_picture', |
| 106 | + ], |
| 107 | + 'callback' => 'UploadPictureConsumer', |
| 108 | + ], |
| 109 | + ], |
| 110 | + ], |
| 111 | + 'readonly' => false, |
| 112 | + ], |
| 113 | +]; |
| 114 | +``` |
| 115 | + |
| 116 | +Пример обработчика сообщений: |
| 117 | + |
| 118 | +```php |
| 119 | +// UploadPictureConsumer.php |
| 120 | + |
| 121 | +use Proklung\RabbitMq\RabbitMq\ConsumerInterface; |
| 122 | +use PhpAmqpLib\Message\AMQPMessage; |
| 123 | + |
| 124 | +class UploadPictureConsumer implements ConsumerInterface |
| 125 | +{ |
| 126 | + public function execute(AMQPMessage $msg) |
| 127 | + { |
| 128 | + echo ' [x] Received ', $msg->body, "\n"; |
| 129 | + } |
| 130 | +} |
| 131 | +``` |
| 132 | + |
| 133 | +## Интеграция с CLI |
| 134 | +Если у вас установлен модуль [yngc0der.cli](https://github.com/yngc0der/bitrix-cli), вам будут доступны некоторые |
| 135 | +команды, которые упрощают работу: |
| 136 | + |
| 137 | +* `rabbitmq:consumer` Executes a consumer |
| 138 | +* `rabbitmq:delete` Delete a consumer's queue |
| 139 | +* `rabbitmq:purge` Purge a consumer's queue |
| 140 | +* `rabbitmq:setup-fabric` Sets up the Rabbit MQ fabric |
| 141 | +* `rabbitmq:stdin-producer` Executes a producer that reads data from STDIN |
| 142 | + |
| 143 | +## Адаптировано к Bitrix |
| 144 | +- [x] Connection (Stream, Socket, Lazy, LazySocket) |
| 145 | +- [x] Connection factory |
| 146 | +- [x] Binding |
| 147 | +- [x] Producer |
| 148 | +- [x] Consumer |
| 149 | +- [x] Parts holder |
| 150 | +- [x] Fallback producer |
| 151 | +- [ ] Multi-consumer |
| 152 | +- [ ] Dynamic consumer |
| 153 | +- [ ] Batch consumer |
| 154 | +- [ ] Anon consumer |
| 155 | +- [ ] Rpc client |
| 156 | +- [ ] Rpc server |
| 157 | +- [ ] Logged channel |
| 158 | + |
| 159 | +## Credits |
| 160 | +Модуль и документация базируется на [RabbitMqBundle](https://github.com/php-amqplib/RabbitMqBundle). |
| 161 | +Там же вы можете найти подробную информацию о его использовании. |
0 commit comments