usmonaliyev/laravel-simple-rabbitmq

This package provides simple usage of rabbitmq.

1.1.3 2025-01-24 16:12 UTC

This package is auto-updated.

Last update: 2025-01-24 16:14:32 UTC


README

laravel-simple-rabbitmq

The package for simplified RabbitMQ usage, supporting multiple connections, easy publishing, and consumer mode.

Documentation

Key Features

  • Multiple Connections: Effortlessly manage multiple RabbitMQ connections within the same application.

  • Exchange supporting: You can push messages to exchanges

  • Message Publishing: Easily publish messages to queues and exchange with a fluent, chainable syntax.

  • Consumer Mode: Enable consumers to receive and process messages from queues in real time.

  • Manage queues and exchanges in config file: You can register queues and exchanges in config/simple-mq.php and define them in easy way which is amqp:define-queues command.

Installation

You can install the package via composer:

composer require usmonaliyev/laravel-simple-rabbitmq

Next step you must publish config and action register files:

php artisan vendor:publish --provider="Usmonaliyev\SimpleRabbit\SimpleRabbitMQServiceProvider"

As a result of this command, you will have a configuration file config/simple-mq.php and a registry file routes/amqp-handlers.php.

The config/simple-mq.php config file contains RabbitMQ connections with credentials, queues, default connection and default queue.

The next stage is configure .env file.

SIMPLE_MQ_CONNECTION=
SIMPLE_MQ_QUEUE=

SIMPLE_MQ_HOST=
SIMPLE_MQ_PORT=
SIMPLE_MQ_USERNAME=
SIMPLE_MQ_PASSWORD=

Usage

The package can publish and consume messages

Publishing

You can publish a message with default connection and default queue:

<?php

use Illuminate\Http\Request;
use Usmonaliyev\SimpleRabbit\Facades\SimpleMQ;

class FooController
{
    public function createFoo(Request $request)
    {
        // Something..
        
        SimpleMQ::queue('foo-queue')
          ->setBody(['name' => 'First Foo'])
          ->handler('create-foo')
          ->publish();
          
        return response()->json(['message' => 'OK']);
    }
}

Also, exchange function publish message to RabbitMq exchange:

<?php

namespace App\Https\Controllers;

use Illuminate\Http\Request;
use Usmonaliyev\SimpleRabbit\Facades\SimpleMQ;

class FooController
{
    public function createFoo(Request $request)
    {
        // Something..
        
        SimpleMQ::exchange('foo-exchange')
          ->setBody(['name' => 'First Foo'])
          ->handler('create-foo')
          ->publish();
          
        return response()->json(['message' => 'OK']);
    }
}

If you have multiply connection to RabbitMq, you can publish a message with connection method.

<?php

namespace App\Https\Controllers;

use Illuminate\Http\Request;
use Usmonaliyev\SimpleRabbit\Facades\SimpleMQ;

class FooController
{
    public function createFoo(Request $request)
    {
        // Something..
        
        SimpleMQ::connection('foo-connection')
          ->queue('foo-queue')
          ->setBody(['name' => 'First Foo'])
          ->handler('create-foo')
          ->publish();
          
        return response()->json(['message' => 'OK']);
    }
}

Consuming

Create app/AMQP/Handlers folder and create your handler classes.

For example:

<?php

namespace App\AMQP\Handlers;

use Usmonaliyev\SimpleRabbit\MQ\Message;

class FooHandler
{
    public function handle(Message $message)
    {
        // do something...
        
        $message->ack();
        
        return ['ok' => true];
    }
}

Don't forget acknowledge message end of process, else consumer does not accept next message.

Then register your handler in routes/amqp-handlers.php file.

<?php

use \App\AMQP\Handlers\FooHandler;
use \Usmonaliyev\SimpleRabbit\Facades\ActionMQ;

ActionMQ::register('create-foo', [FooHandler::class, 'handle']);

To consume messages use:

php artisan amqp:consume connection? queue?

The command requires two arguments which are connection and queue.
If you don't give them, command uses default connection and queue.

Contracts

We have a telegram group, you can join use.

Plans

  • Exchange configuration in config/simple-mq.php
  • Setup testing.

Testing

composer test

License

The MIT License.