PHPackages                             juniorfontenele/laravel-rabbitmq - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Queues &amp; Workers](/categories/queues)
4. /
5. juniorfontenele/laravel-rabbitmq

AbandonedArchivedLibrary[Queues &amp; Workers](/categories/queues)

juniorfontenele/laravel-rabbitmq
================================

A Laravel package for RabbitMQ

024[4 PRs](https://github.com/juniorfontenele/laravel-rabbitmq/pulls)PHPCI passing

Since Oct 13Pushed 4mo ago1 watchersCompare

[ Source](https://github.com/juniorfontenele/laravel-rabbitmq)[ Packagist](https://packagist.org/packages/juniorfontenele/laravel-rabbitmq)[ RSS](/packages/juniorfontenele-laravel-rabbitmq/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (5)Used By (0)

Laravel RabbitMQ Package
========================

[](#laravel-rabbitmq-package)

[![Latest Version on Packagist](https://camo.githubusercontent.com/ad0ff9d4c89e624f51bfcf65263eec49ba283e11117e1ac20131bf122d4cc6d9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6a756e696f72666f6e74656e656c652f6c61726176656c2d7261626269746d712e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/juniorfontenele/laravel-rabbitmq)[![Tests](https://camo.githubusercontent.com/46d6a9d289304d6ec6f2b69c3e94593937fe15d2974c051e849dc23dfcf12874/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6a756e696f72666f6e74656e656c652f6c61726176656c2d7261626269746d712f74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/juniorfontenele/laravel-rabbitmq/actions/workflows/tests.yml)[![Total Downloads](https://camo.githubusercontent.com/428bf43de887272ab24043516f3b6a4251a35159c45a27b9a6d74a3f7016f16f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6a756e696f72666f6e74656e656c652f6c61726176656c2d7261626269746d712e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/juniorfontenele/laravel-rabbitmq)

A robust Laravel package for integrating with RabbitMQ, providing support for multiple connections, exchanges, queues, and consumers. This package simplifies the process of working with RabbitMQ in your Laravel applications.

Features
--------

[](#features)

- Multiple RabbitMQ connections support
- SSL/TLS connection support
- Easy configuration of exchanges and queues
- Flexible consumer system
- Built-in retry mechanism
- Command-line worker
- Event-driven architecture

Requirements
------------

[](#requirements)

- PHP 8.3 or higher
- Laravel 12.0 or higher
- RabbitMQ server
- php-amqplib/php-amqplib ^3.7

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require juniorfontenele/laravel-rabbitmq
```

After installing, publish the configuration file:

```
php artisan rabbitmq:install
```

Configuration
-------------

[](#configuration)

### Basic Environment Configuration

[](#basic-environment-configuration)

Add the following variables to your `.env` file:

```
RABBITMQ_HOST=localhost
RABBITMQ_PORT=5672
RABBITMQ_USER=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_VHOST=/
RABBITMQ_SSL=false
```

For SSL connections, you can also configure:

```
RABBITMQ_SSL=true
RABBITMQ_SSL_CAFILE=/path/to/ca.pem
RABBITMQ_SSL_CERTFILE=/path/to/cert.pem
RABBITMQ_SSL_KEYFILE=/path/to/key.pem
RABBITMQ_SSL_VERIFY_PEER=true
```

### Configuration Structure

[](#configuration-structure)

The published configuration file (`config/rabbitmq.php`) contains sections for:

#### Connections

[](#connections)

Define your RabbitMQ server connections:

```
'connections' => [
    'default' => [
        'host' => env('RABBITMQ_HOST', 'localhost'),
        'port' => env('RABBITMQ_PORT', 5672),
        'user' => env('RABBITMQ_USER', 'guest'),
        'password' => env('RABBITMQ_PASSWORD', 'guest'),
        'vhost' => env('RABBITMQ_VHOST', '/'),
        'ssl' => [
            'enabled' => env('RABBITMQ_SSL', false),
            'cafile' => env('RABBITMQ_SSL_CAFILE', null),
            'local_cert' => env('RABBITMQ_SSL_CERTFILE', null),
            'local_key' => env('RABBITMQ_SSL_KEYFILE', null),
            'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true),
        ],
    ],
    // Add more connections as needed
]
```

#### Exchanges

[](#exchanges)

Configure your RabbitMQ exchanges:

```
'exchanges' => [
    'default' => [
        'connection' => 'default',           // Connection to use
        'name' => 'app.default',             // Exchange name
        'type' => 'direct',                  // Type: direct, topic, fanout, headers
        'passive' => false,                  // Don't create, error if doesn't exist
        'durable' => true,                   // Survive broker restart
        'auto_delete' => false,              // Delete when no queues bound
        'internal' => false,                 // No direct publishing
        'arguments' => [],                   // Additional arguments
    ],
]
```

#### Queues

[](#queues)

Configure your RabbitMQ queues:

```
'queues' => [
    'default' => [
        'exchange' => 'default',             // Exchange to bind to
        'name' => 'default_queue',           // Queue name
        'routing_key' => 'default_queue',    // Routing key
        'consumer_tag' => 'consumer_tag',    // Consumer identifier
        'passive' => false,                  // Don't create, error if doesn't exist
        'durable' => true,                   // Survive broker restart
        'exclusive' => false,                // Only one connection can use
        'auto_delete' => false,              // Delete when no consumers
        'arguments' => [],                   // Additional arguments
        'prefetch' => [
            'count' => 1,                    // Messages to prefetch
            'size' => 0,                     // Total size in bytes
        ],
        'retry' => [
            'enabled' => true,               // Enable retry mechanism
            'max_attempts' => 3,             // Maximum retry attempts
            'delay' => 60000,                // Delay between retries (ms)
        ],
    ],
]
```

#### Worker

[](#worker)

Configure worker behavior:

```
'worker' => [
    'memory_limit' => 128,                   // Memory limit in MB
    'timeout' => 60,                         // Wait timeout in seconds
    'sleep' => 3,                            // Sleep when no message (seconds)
    'max_jobs' => 0,                         // Max jobs (0 = unlimited)
    'tries' => 1,                            // Default retry attempts
],
```

Usage
-----

[](#usage)

### Publishing Messages

[](#publishing-messages)

You can publish messages using the RabbitMQ facade:

```
use JuniorFontenele\LaravelRabbitMQ\Facades\RabbitMQ;
```

The package provides a standardized `EventMessage` class that helps with formatting and handling messages:

```
use JuniorFontenele\LaravelRabbitMQ\Facades\RabbitMQ;
use JuniorFontenele\LaravelRabbitMQ\Messages\EventMessage;

// Create a standardized event message
$message = EventMessage::make('user.created', [
    'id' => 123,
    'name' => 'John Doe',
    'email' => 'john@example.com'
])
    ->routingKey('user.events')
    ->messageId(uniqid())
    ->correlationId('request-123');

// Publish the event message
RabbitMQ::publish('default', $message);
```

The `EventMessage` automatically includes:

- Timestamp
- Application name
- Hostname
- Event name
- Payload data

### Consuming Messages

[](#consuming-messages)

#### Creating a Consumer

[](#creating-a-consumer)

Create a custom consumer by extending the base `Consumer` class:

```
