ahmadrezafatemikia/laravel-ampq

Elegant and minimal RabbitMQ (AMPQ) integration for Laravel 10–12, powered by php-amqplib.

Installs: 1

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/ahmadrezafatemikia/laravel-ampq

v1.0.0 2025-11-11 09:37 UTC

This package is auto-updated.

Last update: 2025-11-12 09:57:12 UTC


README

Elegant, minimal, and production‑ready RabbitMQ (AMQP) integration for Laravel 10–12, powered by php-amqplib.
Define channels once, publish/consume everywhere — Laravel‑native, queue‑agnostic, and built for real apps.

✨ Highlights

  • 🧩 Laravel‑native API — Ampq::publish() / Ampq::consume() + helper ampq_publish()
  • ⚙️ Config‑driven channels — queue + exchange + routing in config/ampq.php
  • 🔁 DLX/DLQ built‑in — dead‑letter exchange/queue via config (opt‑in)
  • ⏳ Prefetch/QoS — tune consumer throughput per connection
  • 🪶 Lightweight — depends only on php-amqplib/php-amqplib
  • 🛠 Artisan commands — ampq:publish and ampq:consume for quick ops
  • 🧯 Safe defaults — persistent messages, clean shutdown, idempotency‑friendly

Note: Package name intentionally uses AMPQ spelling.

📦 Install

composer require ahmadrezafatemikia/laravel-ampq
php artisan vendor:publish --tag=ampq-config

⚙️ Configuration

config/ampq.php

return [
    'connections' => [
        'default' => [
            'host'     => env('AMPQ_HOST', '127.0.0.1'),
            'port'     => (int) env('AMPQ_PORT', 5672),
            'user'     => env('AMPQ_USER', 'guest'),
            'password' => env('AMPQ_PASSWORD', 'guest'),
            'vhost'    => env('AMPQ_VHOST', '/'),
            'prefetch' => (int) env('AMPQ_PREFETCH', 10),
            'dlx' => [
                'enabled'  => (bool) env('AMPQ_DLX_ENABLED', false),
                'exchange' => env('AMPQ_DLX_EXCHANGE', 'app.dlx'),
                'routing'  => env('AMPQ_DLX_ROUTING', 'dead'),
                'queue'    => env('AMPQ_DLX_QUEUE', 'app.dlq'),
                'type'     => env('AMPQ_DLX_TYPE', 'direct'),
            ],
        ],
    ],
    'channels' => [
        // Example
        'emails' => [
            'connection' => 'default',
            'queue'      => 'emails',
            'exchange'   => 'app.events',
            'routing'    => 'emails.welcome',
            'type'       => 'direct',
        ],
    ],
];

.env

AMPQ_HOST=127.0.0.1
AMPQ_PORT=5672
AMPQ_USER=appuser
AMPQ_PASSWORD=secret
AMPQ_VHOST=/app
AMPQ_PREFETCH=10

AMPQ_DLX_ENABLED=true
AMPQ_DLX_EXCHANGE=app.dlx
AMPQ_DLX_ROUTING=dead
AMPQ_DLX_QUEUE=app.dlq

🧠 Usage

Publish (PHP)

use Ampq;

Ampq::publish([
  'event' => 'user.registered',
  'user_id' => 42,
  'timestamp' => now(),
], 'emails');

Publish (CLI)

php artisan ampq:publish emails '{"event":"user.registered","user_id":42}'

Consume

php artisan ampq:consume emails

🧰 Helper

ampq_publish(['hello' => 'world'], 'emails');

🧵 Supervisor (Production)

[program:ampq-emails]
command=php /var/www/app/artisan ampq:consume emails
numprocs=2
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/ampq-emails.log
stopasgroup=true
killasgroup=true

🧱 Under the Hood

  • Namespace: AhmadrezaFatemikia\LaravelAmpq
  • Facade: Ampq
  • Commands:
    • php artisan ampq:publish {channel} {payload}
    • php artisan ampq:consume {channel}

📜 License

MIT