muxtorov98 / yii2-rabbitmq-queue
RabbitMQ Queue Worker for Yii2 Advanced (universal package)
Installs: 30
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/muxtorov98/yii2-rabbitmq-queue
Requires
- php: ^8.0
- php-amqplib/php-amqplib: ^3.7
- yiisoft/yii2: ^2.0.13
README
RabbitMQ Queue Worker for Yii2 Advanced microservices (universal package)
Ushbu paket Yii2 loyihasida RabbitMQ queue workerlarini yaratish va boshqarish uchun mo‘ljallangan.
Talablar
- PHP >= ^8.1
- Yii2 >= 2.0.13
O‘rnatish
- RabbitMQ ni ishga tushurish uchun quyidagi URL dan foydalaning:
https://github.com/Muxtorov98/docker-compose.rabbitmq.prod.yml/tree/main
Composer orqali:
composer require muxtorov98/yii2-rabbitmq-queue:v1.1.0
Konfiguratsiya
- .env
RABBITMQ_HOST=localhost RABBITMQ_PORT=5672 RABBITMQ_USER=admin RABBITMQ_PASSWORD=admin RABBITMQ_VHOST=/
- common/config/main.php fayilini sozlang:
Publisher (xabar yuborish)
return [ 'components' => [ 'rabbitPublisher' => [ 'class' => RabbitMQQueue\Components\RabbitPublisher::class, 'host' => env('RABBITMQ_HOST'), 'port' => env('RABBITMQ_PORT'), 'user' => env('RABBITMQ_USER'), 'password' => env('RABBITMQ_PASSWORD'), 'vhost' => '/', ], ],
- console/config/main.php faylini sozlang:
Consumer / Worker (xabarlarni qabul qilish)
use RabbitMQQueue\Controllers\WorkerController; use RabbitMQQueue\Registry\HandlerRegistry; use RabbitMQQueue\Handlers\QueueHandlerInterface; return [ 'components' => [ 'rabbitmq' => [ 'class' => RabbitMQQueue\Components\RabbitMQConnection::class, 'host' => env('RABBITMQ_HOST'), 'port' => env('RABBITMQ_PORT'), 'user' => env('RABBITMQ_USER'), 'password' => env('RABBITMQ_PASSWORD'), 'vhost' => '/', ], ], 'controllerMap' => [ 'worker' => WorkerController::class, ], 'container' => [ 'definitions' => [ HandlerRegistry::class => function(\yii\di\Container $container) { $handlers = []; foreach (glob(__DIR__ . '/../../console/handlers/*Handler.php') as $file) { $class = 'console\\handlers\\' . basename($file, '.php'); if (class_exists($class) && is_subclass_of($class, QueueHandlerInterface::class)) { $handlers[] = $container->get($class); } } return new HandlerRegistry($handlers); }, ], ], ];
Handler yaratish
- Workerlar
console/handlerspapkasida bo‘lishi shart. Har bir worker klass*Handler.phpnomi bilan vaQueueHandlerInterfaceni implement qilishi kerak.
Misol:
- Xabar yuborish (Publisher)
Yii::$app->rabbitPublisher->publish('default_queue', ['message' => 'Hello queue']);
- Consumer / Worker (xabarlarni qabul qilish)
<?php namespace console\handlers; use RabbitMQQueue\Attributes\QueueChannel; use RabbitMQQueue\Handlers\QueueHandlerInterface; #[QueueChannel('default_queue')] class DefaultHandler implements QueueHandlerInterface { public function handle(array $data): string { if (empty($data)) { return "👋 Hello RabbitMQ! (empty message)"; } return "📨 Received: " . json_encode($data, JSON_UNESCAPED_UNICODE); } }
-
#[QueueChannel('queue_name')]— qaysi queue bilan ishlashini belgilaydi. -
handle()metodi message-ni qabul qiladi va qaytaradi (log).
Worker ishga tushirish
- Console-da ishga tushuring:
php yii worker/start
👷 Listening on default_queue
📨 Received: {"message":"Hello queue"}