Skip to content

Muxtorov98/yii2-rabbitmq-queue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Yii2 RabbitMQ Queue Worker

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/handlers papkasida bo‘lishi shart. Har bir worker klass *Handler.php nomi bilan va QueueHandlerInterface ni 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"}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages