定制 muxtorov98/rabbitmq-universal 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

muxtorov98/rabbitmq-universal

Composer 安装命令:

composer require muxtorov98/rabbitmq-universal

包简介

Universal RabbitMQ Queue Worker for PHP frameworks (Laravel, Symfony, Yii2)

README 文档

README

Universal RabbitMQ Queue System — bu PHP 8+ uchun ishlab chiqilgan framework-agnostic kutubxona bo‘lib,
Laravel, Symfony va Yii2 loyihalarida xabar yuborish (publish) va qabul qilish (consume) jarayonlarini bir xil sintaksisda amalga oshirish imkonini beradi.

🚀 Asosiy xususiyatlar

✅ Laravel, Symfony va Yii2 bilan avtomatik moslashadi
.env orqali sozlanadi — qo‘shimcha config talab etilmaydi
✅ Auto reconnect & retry mexanizmi
✅ QoS, prefetch, confirm mode (ACK) qo‘llab-quvvatlanadi
✅ PSR-4 autoload va PSR-3 logging
✅ Worker backgroundda doimiy ishlaydi (Supervisor yoki Docker bilan)

📦 O‘rnatish

composer require muxtorov98/rabbitmq-universal:v2.1.8 --ignore-platform-reqs

docker compose exec php composer require muxtorov98/rabbitmq-universal:v2.1.8 --ignore-platform-reqs

⚙️ .env konfiguratsiyasi

Loyha ildizida .env fayl yarating:

RABBITMQ_HOST='localhost'
RABBITMQ_PORT=5672
RABBITMQ_USER='muxtorov'
RABBITMQ_PASS='5upris#1eWata2ped'
RABBITMQ_VHOST='/'
RABBITMQ_PREFETCH=10
RABBITMQ_SSL=false

# Worker handler fayllar joylashgan joy
HANDLER_PATH='app/Handlers'

🧩 Umumiy Worker va Publisher misoli

🔧 Handler (har uchala framework uchun bir xil)

laravel Handler

app/Handlers/EmailHandler.php:

<?php

namespace App\Handlers;

use RabbitMQQueue\Core\QueueHandlerInterface;
use RabbitMQQueue\Core\QueueChannel;
use RabbitMQQueue\Core\RabbitPublisher;

#[QueueChannel('notification_queue')]
class NotificationHandler implements QueueHandlerInterface
{
    public function handle(array $message): void
    {
        echo "📩 Notification received: " . json_encode($message, JSON_UNESCAPED_UNICODE) . PHP_EOL;
    }
}

⚙️ Laravel integratsiyasi

🪄 1. Avtomatik yuklash

Paket avtomatik tarzda RabbitMQServiceProvider ni yuklaydi, qo‘shimcha ro‘yxatdan o‘tkazish talab etilmaydi.

🏃 2. Worker ishga tushirish

php artisan rabbit:worker

docker compose exec php php artisan rabbit:worker

⚙️ Yii2 integratsiyasi

⚙️ 1. console/config/main.php faylida controllerMap sozlovi

'controllerMap' => [
    'worker' => [
        'class' => \RabbitMQQueue\Frameworks\Yii2\WorkerController::class,
    ],
],

Yii2 Handler

console/Handlers/EmailHandler.php;

<?php

namespace console\Handlers;

use RabbitMQQueue\Core\QueueHandlerInterface;
use RabbitMQQueue\Core\QueueChannel;
use RabbitMQQueue\Core\RabbitPublisher;

#[QueueChannel('email_queue')]
class EmailHandler implements QueueHandlerInterface
{

    public function handle(array $message): void
    {
        echo "📩 Email received: " . json_encode($message, JSON_UNESCAPED_UNICODE) . PHP_EOL;
    }
}

🏃 2. Worker ishga tushirish

php yii worker/start

⚙️ Symfony integratsiyasi

⚙️ 1. services.yaml konfiguratsiyasi

config/services.yaml fayliga quyidagilarni qo‘shing:

RabbitMQQueue\Frameworks\Symfony\:
    resource: '../vendor/muxtorov98/rabbitmq-universal/src/Frameworks/Symfony/*'
    tags: [ 'console.command' ]

symfony Handler

src/Handlers/LogHandler.php;

<?php

namespace App\Handlers;

use RabbitMQQueue\Core\QueueHandlerInterface;
use RabbitMQQueue\Core\QueueChannel;
use RabbitMQQueue\Core\RabbitPublisher;

#[QueueChannel('log_queue')]
class LogHandler implements QueueHandlerInterface
{

    public function handle(array $message): void
    {
        echo "📩 log received: " . json_encode($message, JSON_UNESCAPED_UNICODE) . PHP_EOL;
    }
}

🏃 2. Worker ishga tushirish

php bin/console rabbit:worker:start

✉️ Publish qilish (hamma frameworklarda bir xil)

use RabbitMQQueue\Core\RabbitPublisher;

$publisher = new RabbitPublisher();
$publisher->publish('email_queue', [
    'to' => 'user@example.com',
    'subject' => 'Universal publish test!'
]);

laravel

  • app/Console/Commands/RabbitPublishCommand.php
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use RabbitMQQueue\Core\RabbitPublisher;

class RabbitPublishCommand extends Command
{
    protected $signature = 'rabbit:publish {queue} {--data=}';
    protected $description = 'Publish a message to RabbitMQ queue (from Laravel)';

    public function handle()
    {
        $queue = $this->argument('queue');
        $data = $this->option('data')
            ? json_decode($this->option('data'), true)
            : ['text'=>'Salom from Laravel'];

        $publisher = new RabbitPublisher();
        $publisher->publish($queue, $data);

        $this->info("📩 Message published to queue '{$queue}' from Laravel: " . json_encode($data, JSON_UNESCAPED_UNICODE));
    }
}
  php artisan rabbit:publish log_queue --data='{"status":"processed","to":"user@example.com","text":"Salom from Laravel"}'

symfony

  • src/Command/RabbitPublishCommand.php
<?php

namespace App\Command;

use RabbitMQQueue\Core\RabbitPublisher;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

#[AsCommand(
    name: 'rabbit:publish',
    description: 'Publish a message to RabbitMQ queue'
)]
class RabbitPublishCommand extends Command
{
    protected function configure(): void
    {
        $this
            ->addArgument('queue', InputArgument::REQUIRED, 'Queue name')
            ->addArgument('data', InputArgument::REQUIRED, 'JSON encoded data');
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $queue = $input->getArgument('queue');
        $jsonData = $input->getArgument('data');

        $data = json_decode($jsonData, true);
        if (json_last_error() !== JSON_ERROR_NONE) {
            $output->writeln('<error>❌ JSON format xato:</error> ' . json_last_error_msg());
            return Command::FAILURE;
        }

        $publisher = new RabbitPublisher();
        $publisher->publish($queue, $data);

        $output->writeln("✅ Xabar jo'natildi: <info>$queue</info>");
        return Command::SUCCESS;
    }
}
php bin/console rabbit:publish notification_queue '{"event":"user_registered","user_id":12345,"text":"Salom from Symfony"}'

yii

  • console/controllers/RabbitPublishController.php
<?php
namespace console\controllers;

use yii\console\Controller;
use RabbitMQQueue\Core\RabbitPublisher;
use yii\helpers\Json;

class RabbitPublishController extends Controller
{
    public $data;

    public function options($actionID)
    {
        return ['data'];
    }

    public function actionIndex($queue)
    {
        $data = $this->data ? Json::decode($this->data) : [];

        $publisher = new RabbitPublisher();
        $publisher->publish($queue, $data);

        $this->stdout("Message published to queue '{$queue}' from Yii2\n");
    }
}
php yii rabbit-publish email_queue --data='{"to":"user@example.com","subject":"Yii2 to Laravel"}'

muxtorov98/rabbitmq-universal 适用场景与选型建议

muxtorov98/rabbitmq-universal 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 22 次下载、GitHub Stars 达 1, 最近一次更新时间为 2025 年 10 月 15 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「queue」 「symfony」 「rabbitmq」 「AMQP」 「laravel」 「worker」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 muxtorov98/rabbitmq-universal 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 muxtorov98/rabbitmq-universal 我们能提供哪些服务?
定制开发 / 二次开发

基于 muxtorov98/rabbitmq-universal 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 22
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 19
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-10-15