kuncen/mcs-laravel-rabbitmq

RabbitMQ Publisher and Consumer Laravel for Microservices Architecture

Maintainers

Package info

github.com/MFadlulHafiizh/laravel-rabbitmq-microservice

pkg:composer/kuncen/mcs-laravel-rabbitmq

Statistics

Installs: 31

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.1.1 2026-03-30 04:34 UTC

This package is not auto-updated.

Last update: 2026-03-30 04:35:50 UTC


README

RabbitMQ Publisher & Consumer for Laravel Microservices Architecture.

Supports:

  • Lazy connection (safe for package boot)
  • Topic / Direct exchange publishing
  • Queue-based consumer
  • Artisan listener generator
  • Production-ready worker with Supervisor

🇺🇸 English Documentation

Installation

composer require kuncen/mcs-laravel-rabbitmq

Publish Configuration

php artisan vendor:publish --provider="Kuncen\McsRabbitMQ\RabbitMQServiceProvider"

This will publish:

config/rabbitmq.php

Environment Configuration

Add to .env:

RABBITMQ_HOST=127.0.0.1
RABBITMQ_PORT=5672
RABBITMQ_USERNAME=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_VHOST=/
RABBITMQ_EXCHANGE=

Publishing Messages

Inject Publisher

use Kuncen\MCSLaravel\RabbitMQ\Services\RabbitMQPublisher;

class UserController extends Controller
{
    public function store(RabbitMQPublisher $publisher)
    {
        $publisher->publish(
            payload: [
                'user_id' => 1,
                'name' => 'John Doe'
            ],
            routingKey: 'user.created'
        );

        return response()->json(['status' => 'Message sent']);
    }
}

Publisher Method Signature

publish(
    array $payload,
    string $routingKey,
    string $exchangeType = 'topic',
    ?string $exchange = null
)

Listening (Consumer)

Create Listener

php artisan make:rabbitlistener UserCreatedListener

Generated example:

class UserCreatedListener implements RabbitMQListener
{
    public static function queue(): string
    {
        return 'user.created';
    }

    public function handle(array $payload): void
    {
        // Your business logic here
    }
}

Run Worker

php artisan rabbitmq:consume UserCreatedListener

Worker will listen to:

user.created

Production Setup (Supervisor)

Create file:

/etc/supervisor/conf.d/rabbitmq-user-created.conf

Content:

[program:rabbitmq-user-created]
process_name=%(program_name)s_%(process_num)02d
command=php /path-to-project/artisan rabbitmq:consume UserCreatedListener
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/path-to-project/storage/logs/rabbitmq-user-created.log
stopwaitsecs=3600

Reload Supervisor:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start rabbitmq-user-created

Best Practices

  • Do not auto-declare exchange in production.
  • Let infrastructure manage queue arguments.
  • Use Supervisor for production workers.
  • Recommended: 1 queue = 1 listener.

🇮🇩 Dokumentasi Bahasa Indonesia

Instalasi

composer require kuncen/mcs-laravel-rabbitmq

Publish Konfigurasi

php artisan vendor:publish --provider="Kuncen\McsRabbitMQ\RabbitMQServiceProvider"

File yang akan dibuat:

config/rabbitmq.php

Konfigurasi .env

Tambahkan:

RABBITMQ_HOST=127.0.0.1
RABBITMQ_PORT=5672
RABBITMQ_USERNAME=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_VHOST=/
RABBITMQ_EXCHANGE=

Mengirim Pesan (Publish)

Inject Publisher ke Controller

use Kuncen\MCSLaravel\RabbitMQ\Services\RabbitMQPublisher;

class UserController extends Controller
{
    public function store(RabbitMQPublisher $publisher)
    {
        $publisher->publish(
            payload: [
                'user_id' => 1,
                'name' => 'John Doe'
            ],
            routingKey: 'user.created'
        );

        return response()->json(['status' => 'Message sent']);
    }
}

Signature Method

publish(
    array $payload,
    string $routingKey,
    string $exchangeType = 'topic',
    ?string $exchange = null
)

Listening / Consumer

Membuat Listener

php artisan make:rabbitlistener UserCreatedListener

Contoh isi listener:

class UserCreatedListener implements RabbitMQListener
{
    public static function queue(): string
    {
        return 'user.created';
    }

    public function handle(array $payload): void
    {
        // Logic bisnis di sini
    }
}

Menjalankan Worker

php artisan rabbitmq:consume UserCreatedListener

Worker akan listen ke queue:

user.created

Setup Production (Supervisor)

Buat file:

/etc/supervisor/conf.d/rabbitmq-user-created.conf

Isi:

[program:rabbitmq-user-created]
process_name=%(program_name)s_%(process_num)02d
command=php /path-to-project/artisan rabbitmq:consume UserCreatedListener
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/path-to-project/storage/logs/rabbitmq-user-created.log
stopwaitsecs=3600

Reload supervisor:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start rabbitmq-user-created

Rekomendasi

  • Hindari auto declare exchange di production.
  • Biarkan konfigurasi queue dikelola oleh infrastructure.
  • Gunakan Supervisor untuk worker.
  • Disarankan 1 queue = 1 listener untuk arsitektur microservice.

License

MIT