RabbitMQ Queue Worker for Yii2 Advanced microservices (universal package)
Ushbu paket Yii2 loyihasida RabbitMQ queue workerlarini yaratish va boshqarish uchun mo‘ljallangan.
- PHP >= ^8.1
- Yii2 >= 2.0.13
- 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
- .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);
},
],
],
];
- Workerlar
console/handlers
papkasida bo‘lishi shart. Har bir worker klass*Handler.php
nomi bilan vaQueueHandlerInterface
ni implement qilishi kerak.
- 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).
- Console-da ishga tushuring:
php yii worker/start
👷 Listening on default_queue
📨 Received: {"message":"Hello queue"}