howincodes/laravel-rabbitmq 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

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

howincodes/laravel-rabbitmq

Composer 安装命令:

composer require howincodes/laravel-rabbitmq

包简介

A Laravel RabbitMQ wrapper with automatic dead-letter retry

README 文档

README

A Laravel-first RabbitMQ wrapper that auto-configures dead-letter retry queues so you can focus on writing your handlers—no boilerplate required! 🎉

🚀 Installation

# 1️⃣ Install via Composer
composer require howincodes/laravel-rabbitmq

# 2️⃣ Publish the default config
php artisan vendor:publish \
  --provider="HowinCodes\RabbitMQ\RabbitMQServiceProvider" \
  --tag="config"

This publishes config/rabbitmq.php into your app.

⚙️ Configuration

Open config/rabbitmq.php and you’ll see:

return [

    // 🖥️ Broker Connection
    'host'     => env('RABBITMQ_HOST', '127.0.0.1'),
    'port'     => env('RABBITMQ_PORT', 5672),
    'user'     => env('RABBITMQ_USER', 'guest'),
    'password' => env('RABBITMQ_PASSWORD', 'guest'),
    'vhost'    => env('RABBITMQ_VHOST', '/'),

    // 🔄 Base exchanges
    'exchanges' => [
        'tasks' => [
            'type'    => 'topic',
            'durable' => true,
        ],
        // add your own exchanges here...
    ],

    // 📬 Queues + Retry settings
    'queues' => [
        'tasks' => [
            'exchange'     => 'tasks',
            'routing_keys' => ['task.created'],
            'durable'      => true,
            'consume'      => true,

            // ⚙️ Enable retry logic
            'retry'        => [
                'enabled'      => true,
                'max_attempts' => 5,      # total tries before giving up
                'interval'     => 15000,  # wait 15s before retry (ms)
            ],
        ],
        // `tasks.retry` auto-generated by the package
    ],

    // 🛠️ Map queue names → handler classes
    'queue_handlers' => [
        'tasks'       => HowinCodes\RabbitMQ\Handlers\GenericHandler::class,
        'tasks.retry' => HowinCodes\RabbitMQ\Handlers\GenericRetryHandler::class,
    ],
];

Tip: Feel free to rename tasks to anything—each base queue can have its own retry block!

📚 How It Works

  1. Declare your base queue

    • One config block, no need to manually define DLX or retry queue.
  2. Package auto-generates

    • <exchange>.retry exchange
    • <queue>.retry queue with TTL & DLX back to your base exchange
  3. Handlers

    • GenericHandler processes the main queue.
    • GenericRetryHandler processes messages after they exceed retries.

🎨 Usage

1. Publishing a Message

use HowinCodes\RabbitMQ\Publisher;

app(Publisher::class)
    ->publish('tasks', 'task.created', [
        'id'      => 123,
        'payload' => ['foo' => 'bar'],
    ]);

💡 The tasks exchange is declared automatically.

2. Running the Consumer

php artisan rabbitmq:consume-queues

✔️ Listens on both tasks and tasks.retry queues 🛠️ Dispatches to GenericHandler & GenericRetryHandler

🧑‍🤝‍🧑 Examples

A. Tasks Queue (Default)

  • Exchange: tasks

  • Queue: tasks → retry to tasks.retry

  • Handlers:

    • GenericHandler
    • GenericRetryHandler
// config/rabbitmq.php snippet:
'queues' => [
    'tasks' => [
        'exchange'     => 'tasks',
        'routing_keys' => ['task.created'],
        'retry'        => ['enabled'=>true,'max_attempts'=>5,'interval'=>15000],
    ],
],
'queue_handlers' => [
    'tasks'       => GenericHandler::class,
    'tasks.retry' => GenericRetryHandler::class,
],

B. User Events Queue

// config/rabbitmq.php snippet:
'exchanges' => [
    'users' => ['type'=>'topic','durable'=>true],
],
'queues' => [
    'users' => [
        'exchange'     => 'users',
        'routing_keys' => ['user.created','user.updated','user.deleted'],
        'retry'        => ['enabled'=>true,'max_attempts'=>3,'interval'=>10000],
    ],
],
'queue_handlers' => [
    'users'       => GenericHandler::class,
    'users.retry' => GenericRetryHandler::class,
],

Publishing:

app(Publisher::class)
    ->publish('users', 'user.created', [
        'id'    => 456,
        'name'  => 'Alice',
        'email' => 'alice@example.com',
    ]);

Consuming:

php artisan rabbitmq:consume-queues

🛠️ Customization & Advanced

  • Custom Handlers: Swap GenericHandler and GenericRetryHandler for your own classes in config/rabbitmq.php.

  • Custom DLX Names: Override 'exchange' or 'routing_key' in the retry block.

  • Disable Retry: 'retry' => ['enabled' => false] or remove the retry block.

  • Monitoring: Use Laravel logging, Sentry, or other APM to track dead-letter flows.

❤️ Thank You!

Thanks for choosing howincodes/laravel-rabbitmq! If you love it, ⭐ star the repo and share your feedback. Happy messaging! 🚀

howincodes/laravel-rabbitmq 适用场景与选型建议

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

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

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

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

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

BUG 修复 & 性能优化

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

项目外包 & 长期维护

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

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

统计信息

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

GitHub 信息

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

其他信息

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